• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C++] Liczby pseudolosowe zwiększające się.

Object Storage Arubacloud
0 głosów
474 wizyt
pytanie zadane 17 listopada 2015 w C i C++ przez subterras Użytkownik (680 p.)
Witam,  mam za zadanie napisać program który wpisuje do tablicy 20 liczb losowych z zakresu <0,50> , ale każda następna ma być większa od poprzedniej. Program byłby prosty ale nie mam pojęcia jak zrobić tą 2 część. Nie proszę o program , ale jakąś podpowiedź czego mam szukać i z czym kombinować. Z góry dzięki :)

4 odpowiedzi

+4 głosów
odpowiedź 17 listopada 2015 przez adrian17 Ekspert (344,860 p.)
edycja 17 listopada 2015 przez adrian17

Wylosuj 20 liczb a potem je posortuj.

komentarz 17 listopada 2015 przez Ehlert Ekspert (212,670 p.)
Kiepski pomysł biorąc pod uwagę konieczność implementacji losowania bez powtórzeń i czas sortowania.
komentarz 17 listopada 2015 przez adrian17 Ekspert (344,860 p.)
A, źle przeczytałem i zinterpretowałem jako "większe lub równe", co byłoby znacznie łatwiejsze. Mój błąd.
komentarz 17 listopada 2015 przez hit02 Nałogowiec (33,970 p.)
Moim zdaniem to jest bajlepszy pomysł.
+2 głosów
odpowiedź 17 listopada 2015 przez Rogargol Pasjonat (16,600 p.)
Pierwsze rozwiazanie jakie sie nasuwa to losowac kolejne liczby zmieniajac zakres tak zeby minimalna wylosowana byla wieksza od poprzedniej wylosowanej. Jednak tu pojawia sie pulapka, bo co w momencie kiedy wylosuje sie pierwsza liczbe 50?, dlatego tak jak pisali juz koledzy wyzej, najlepiej bedzie wrzucic 20 wynikow do tablicy i posortowac, przy okazji po kazdym losowaniu sprawdzac czy wylosowana liczba nie jest juz w tablicy.

Mozesz tez uzyc jakiegos kontenera z wbudowanymi funkcjami srotujacymi zamiast tablicy.
komentarz 17 listopada 2015 przez Dragonet.17 Pasjonat (19,630 p.)
Jeżeli wylosujesz na początku 50 to powinna być tylko jedna liczba w tablicy - jedyny przypadek kiedy tak będzie, ale rozwiązanie prawidłowe
komentarz 17 listopada 2015 przez Rogargol Pasjonat (16,600 p.)
Ok, ale jak wylosujesz jako pierwsze 49?

To bedziesz mial dwie liczby... Pytanie czy liczb musi byc 20, czy moze byc mniej, jesli mniej to wtedy mozna faktycznie losowac tak jak w pierwszym przykladzie podalem.
komentarz 17 listopada 2015 przez Dragonet.17 Pasjonat (19,630 p.)
NIe jest to do końca sprecyzowane, ale powiem, że gdyby tak jednak było to dochodzi kolejny cikekawy warunek, bo tak: na początku liczba nie powinna być większa od 30 (max) i ta wartość z każdym kolejnym krokiem będzie zwrastać o 1 - interesujące zadanie, ktoś wpadł na ciekawy pomysł :D tyle, że łatwo można go ogarnąc :P
komentarz 17 listopada 2015 przez Rogargol Pasjonat (16,600 p.)
Z tym, ze wtedy zaburzamy losowosc, bo takie ograniczenia powoduja nienaturalne zageszczanie wynikow w okreslonych przedzialach. Jesli ma sie w pelni losowo rozkladac, to musi byc to rozegrane na zasadzie losowania 20 liczb z zakresu 0-50 ze sprawdzaniem czy sie nie dubluja i pozniej posortowane.
komentarz 17 listopada 2015 przez Dragonet.17 Pasjonat (19,630 p.)
No ale niekoniecznie musi tak być, jest sporo niedomówień co powoduje pewien chaos, jednak dałoby się to ogarnąć :P
0 głosów
odpowiedź 17 listopada 2015 przez Ehlert Ekspert (212,670 p.)
zrób rekurencję. W argumencie funkcji dajesz 0. Losuje od 0 - 50. Zwracany wynik to argument wyowłania tej samej funkcji i losujesz od argument+1. Dodaj jeszcze if, żeby się funkcja nie program się nie zapętlił.
0 głosów
odpowiedź 17 listopada 2015 przez Dragonet.17 Pasjonat (19,630 p.)
wylosuj liczbę - każdą wrzucaj do tablicy ale zarzuć warunek, sprawdzający czy wylosowana liczba jest większa od pozostałych - aby to sprawdzić dodaj do tego zmienną pomocniczą  np k ,  i - zmienna w pętli for

Powiedzmy, masz juz 5 liczb w tablicy ,  zarzucasz 6  liczbę więc i=5 sprawdzasz warunkiem czy wylosowana liczba jest większa od 1,2...5 w tablicy, jeżeli tak to k++.
Dzięki temu rozwiązaniu sprawa się uproszcza bowiem k musi być równe i-1, czyli w tym przypadku dla 6 liczby wylosowanej k musi wynosić 5,jeżeli prawda, to przypisz liczbę do tablicy, jeżeli nie to losuj liczbę ponownie.

 

aby sprawdzić ten warunek z dodatkową zmienną, jesteś zmuszony do zrobienia pęli w pętli , ta druga pętla będzie zawierała zmienną k=i-1, ponieważ tyle razy musi się wykonać aby sprawdzić poprzednie liczby w pętli

Zrozumiałeś o co mi chodzi ?

Myślę, że powinieneś załapać.
Moim zdaniem jest to najprostsze rozwiązanie
komentarz 17 listopada 2015 przez Dragonet.17 Pasjonat (19,630 p.)
Coż, aby działanie programu było rzetelne, program powinien się zakończy w momencie wylosowania liczby 50.

Ogólnie trzeba pokombinować z pętlami,
Pozdro

Podobne pytania

0 głosów
2 odpowiedzi 241 wizyt
pytanie zadane 8 lutego 2016 w C i C++ przez Noak Mądrala (5,900 p.)
0 głosów
1 odpowiedź 206 wizyt
pytanie zadane 20 października 2015 w Inne języki przez Krzysztof Rampa Nowicjusz (190 p.)
0 głosów
2 odpowiedzi 232 wizyt
pytanie zadane 31 grudnia 2015 w C i C++ przez Konrad Nabożny Stary wyjadacz (13,460 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...