operacje na liczbach losowych

0

Witam,
Staram się zrobić program w którym docelowo wprowadzało by się dwie początkowe wartości np.
A= 1000
B= 2000

następnie wprowadzało by się drugi parametr a właściwie 4 parametry które były by przedziałami
np. przedział dla wartości A= 1-500 i dla wartości B 1-1000 po czym następuje losowanie wartości z tych przedziałów i odejmowanie wylosowanej wartości od wartości bazowej, symulacja taka była by powtarzana powiedzmy 100x po czym wychodziłby wynik który parametr ile razy doszedł pierwszy do wartości 0.

teoretycznie zrobiłem program który dawałby 1 symulację jednak pojawił się pierwszy problem podczas testowania... wyświetlając wylosowaną liczbę nie mogłem się już do niej odwołać gdybym ją chciał odjąć od wartości bazowej bo wtedy następowało kolejne losowanie, jedyne co mi jak dotąd przyszło do głowy to wygenerowanie najpierw losowych liczb i zapisanie ich do tablicy a potem tylko pobieranie tych liczb i wykonywanie operacji na nich, jednak wiąże się to z generowaniem tablicy 100x100 (przy 100 symulacjach które mają być wykonane docelowo) oraz ograniczenie programu do 100 powtórzeń po których kończą się wartości w 1 pierwszej kolumnie czyli pierwsza symulacja a po których niekoniecznie wartość bazowa musi spaść do 0

Aktualnie wygląda to tak, nie jest to dokładnie to o czym pisałem ponieważ na razie testuję różne możliwości w poniższym przykładzie wartość bazowa oraz przedział do losowania są z góry ustalone i są ta wartości w których nie przekroczy się 100 powtórzeń. No i jest tylko 1 wartość zamiast 2.

Random r = new Random();
            int[,] ary = new int[99, 99]; // stworzenie tablicy 100x100
            

            //zapelnienie tablicy losowymi wartościami 1-200
            for (int i = 0; i < 99; i++)
            {
                for (int j = 0; j < 99; j++)
                ary[i,j] = r.Next(1, 200); 
            }
            // ustawienie wartosci poczatkowych
            int wrt1;
            wrt1 = 1000;

            //pierwsza symulacja
            if (wrt1 > 0)
            {
                
                for (int j = 0; j < 99; j++)
                {
                    Console.WriteLine("{0} - {1}", wrt1, ary[0, j]); 
                    wrt1 = wrt1 - ary[0, j];
                    if (wrt1 <= 0)
                    {
                        break;
                    }
                }
                            
            }

               
            
            Console.Read();

Zastanawiam się czy jest to jedyna możliwość aby operować wylosowanymi liczbami? czy może jest coś bardziej efektywnego bez konieczności zapisywania wartości do tablic.

0

z tego co skumalem chcesz cos takiego
pisze z glowy, wiec moze byc jakis blad

// zakladam ze jakos je zainicjujesz
int A,B;
int AFrom, ATo, BFrom, BTo;
Random r = new Random();
int AFirstCount = 0, BFirstCount = 0;

for(int i=0; i<NumOfTests; i++)
{
int tmpA = A, tmpB = B;
int tmp1, tmp2, step = 0;
while (tmpA > 0 && tmpB > 0)
{
tmp1 = r.Next(AFrom, ATo);
tmp2 = r.Next(BFrom, BTo);
Console.WriteLine("A={0} - {1} | B={2} - {3}", tmpA, tmp1, tmpB, tmp2);
tmpA -= tmp1;
tmpB -= tmp2;
step++;
}
Console.Write("Test {0}, po {1} krokach ", i, step);
if (tmpA <=0) {AFirstCount++;Console.WriteLine("A pierwsze.");}
else {BFirstCount++;Console.WriteLine("B pierwsze.");}
}

Console.WriteLine("Liczba prob: {0} | pierwsze A: {1} | pierwsze B: {2}", NumOfCounts, AFirstCount, BFirstCount);

0

Dzisiaj niestety już nie zdążę tego przetestować ale nawet jeżeli w kodzie jest jakiś błąd to jest to dobry pomysł aby ominąć używanie tablic tak więc wielkie dzięki, jutro potestuję.

0

Na pewno jest błąd w założeniach, i to już w drugiej linijce:

int[,] ary = new int[99, 99]; // stworzenie tablicy 100x100

to nie jest tablica 100 na 100 tylko 99 na 99.

1 użytkowników online, w tym zalogowanych: 0, gości: 1