Игра Лото - C (СИ)
Формулировка задачи:
Игра лото: нужно из 49 чисел выбрать 6 с помощью генератора случайных чисел. Это я вроде бы сделала,но как сделать так, чтобы ни одно из этих 6 чисел не дублировалось?У меня есть подсказка, что 6 элементов массива лото нужно перевернуть с false на true, но как осуществить это на практике я не знаю.
#include <stdio.h> #include <stdlib.h> #include <time.h> #define ZIEHEN 6 #define KUGELN 49 int main ( void ) { int Lotto [ KUGELN ] = { 0 } ; // so werden alle Elemente mit dem Wert 0 belegt int Ergebnis [ ZIEHEN ] = { 0 , 0 , 0 , 0 , 0 , 0 } ; int i ; int gezogen = 0 ; // so viele Zahlen wurden schon gezogen srand ( (unsigned) time ( NULL ) ) ; // Array mit Lottozahlen : for ( i = 0 ; i < 50 ; i ++ ) { Lotto [ i ] = +i ; if ( i % 7 ) printf ( "%d\t" , Lotto [ i ] ) ; else printf ( "%d\n" , Lotto [ i ] ) ; } printf ( "\n\n" ) ; // Array mit Zufallzahlen: for ( i = 0 ; i < 6 ; i ++ ) { Ergebnis [ i ] = 1 + rand( ) % 49; printf ( "%d\t " , Ergebnis [ i ] ) ; } printf ( "\n\n " ) ; system ( "PAUSE" ) ; return 0; }
Решение задачи: «Игра Лото»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> #define KUGELN 49 #define ZIEHEN 6 int main(void) { int Ergebnis[ZIEHEN] = { 0 }; int randomLotto, i, j; int istLottoVorhanden; srand(time(NULL)); /* печатаем лото таблицу */ for (i = 0; i < KUGELN; i++) { if ((i + 1) % 7 != 0) printf("%2d ", i + 1); else printf("%2d\n", i + 1); } printf("\n\n"); /* заполняем результат */ for (i = 0; i < ZIEHEN; i++) { do { randomLotto = rand() % KUGELN + 1; /* получаем произвольное значение */ /* проверяем его наличие в уже заполненной части массива */ j = 0; istLottoVorhanden = 0; while ((j < i) && !istLottoVorhanden) { if (randomLotto == Ergebnis[j]) istLottoVorhanden = 1; /* найдено */ j++; } } while (istLottoVorhanden); /* повторяем, пока не найдем уникальное */ Ergebnis[i] = randomLotto; /* записываем */ } for (i = 0; i < ZIEHEN; i++) printf("%2d ", Ergebnis[i]); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы: stdio.h, stdlib.h, time.h
- Определяем количество пробиваемых чисел (KUGELN = 49), количество вытаскиваемых чисел (ZIEHEN = 6)
- Создаем массив для хранения результатов (Ergebnis)
- Создаем переменные для хранения случайного числа (randomLotto), номера строки (i), номера столбца (j) и флага наличия числа в массиве (istLottoVorhanden)
- Инициализируем генератор случайных чисел (srand(time(NULL)))
- Выводим лото таблицу (печать заполняется через 7 строк)
- Заполняем массив Ergebnis случайными числами, проверяя наличие каждого числа в уже заполненной части массива (повторяем выбор, пока число не станет уникальным)
- Выводим результаты (числа) в консоль
- Возвращаем 0, завершая работу программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д