#include <iostream.h> #include <conio.h> #include <dos.h> int main() { int k,i; cout << "Napisz sobie na kartce liczby od 1-80 zaraz nastąpi losowanie muli lotka \n(20 z 80)\n"; for(i=1;i<=20;i++) { k=rand() % 80; //losuje liczbe z 80 cout << k << " \n"; _sleep(500); // czeka 500 milisekund na kolejna liczbe /*if (i==20){ //jak zrobić zeby 20 liczba byla powtornie napisana jako plus? cout << "Plus to: " << k;}*/ } getch(); }

[c++] Multi lotek / Rozwiązane
Rozpoczęty przez
norbi123
, 28 08 2008 01:42
2 odpowiedzi w tym temacie
#1
Napisano 28 08 2008 - 01:42
Chcialem sobie zrobic program losujący 20 liczb z 80 jak to jest w multilotku i to mi sie udalo ale mam problem z tym zeby 20 liczba wypisala sie powtornie i byla napisana jako "plus"
#2
Napisano 30 08 2008 - 13:36
No wygląda ok:
Unikniesz w ten sposób sprawdzania 19 niepotrzebnych warunków.
Problem jednak polega na tym, że w twoim programie liczby mogą się powtarzać, a z tego co wiem to w lotto nie jest możliwe.
Można to rozwiązać na 2 sposoby:
- łatwiejszy, ale brak mu dowodu na poprawne (skończone) zakończenie:
każdą z wylosowanych liczb zapisujesz do osobnej tablicy (zbioru) i przy każdej kolejnej wylosowanej sprawdzasz czy nie znajduje się już w tym zbiorze, jeśli nie to ją dodajesz i idziesz dalej, jeśli natomiast już jest w zbiorze to musisz ją wylosować raz jeszcze. Mam nadzieję, że da się zrozumieć o co mi chodzi
- drugi sposób, bardziej elegancki:
tworzysz sobie strukturę dynamiczną, np listę, do której ładujesz wszystkie 80 cyfr (kul)
przy każdym wylosowaniu liczby od 1 do (80 minus liczba już wylosowanych), odszukujesz ją na liście (wylosowana liczba to pozycja "kuli") i usuwasz z niej, zapisując np. do tablicy wynikowej lub na standardowe wyjście.
W tym sposobie program kończy się na pewno ponieważ ostatnia wylosowana pozycja jest z przedziału od 1 do 61, a po jej wylosowaniu (i operacji usuwania) na liście zostaje 60 niewylosowanych liczb (kul)
Pozdrawiam i powodzenia
if(i==20) cout << "plus: " << k;Można też po prostu za pętlą for umieścić samo: cout << "plus: " << k;
Unikniesz w ten sposób sprawdzania 19 niepotrzebnych warunków.
Problem jednak polega na tym, że w twoim programie liczby mogą się powtarzać, a z tego co wiem to w lotto nie jest możliwe.
Można to rozwiązać na 2 sposoby:
- łatwiejszy, ale brak mu dowodu na poprawne (skończone) zakończenie:
każdą z wylosowanych liczb zapisujesz do osobnej tablicy (zbioru) i przy każdej kolejnej wylosowanej sprawdzasz czy nie znajduje się już w tym zbiorze, jeśli nie to ją dodajesz i idziesz dalej, jeśli natomiast już jest w zbiorze to musisz ją wylosować raz jeszcze. Mam nadzieję, że da się zrozumieć o co mi chodzi

- drugi sposób, bardziej elegancki:
tworzysz sobie strukturę dynamiczną, np listę, do której ładujesz wszystkie 80 cyfr (kul)
przy każdym wylosowaniu liczby od 1 do (80 minus liczba już wylosowanych), odszukujesz ją na liście (wylosowana liczba to pozycja "kuli") i usuwasz z niej, zapisując np. do tablicy wynikowej lub na standardowe wyjście.
W tym sposobie program kończy się na pewno ponieważ ostatnia wylosowana pozycja jest z przedziału od 1 do 61, a po jej wylosowaniu (i operacji usuwania) na liście zostaje 60 niewylosowanych liczb (kul)
Pozdrawiam i powodzenia
#3
Napisano 07 10 2008 - 23:42
Spróbuj zrobić to z tablicą. Dajmy jakąś int tablica[20], przy czym plusem jest liczba int o adresie &tablica[19].
Użytkownicy przeglądający ten temat: 0
0 użytkowników, 0 gości, 0 anonimowych