Игра Лото - 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;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы: stdio.h, stdlib.h, time.h
  2. Определяем количество пробиваемых чисел (KUGELN = 49), количество вытаскиваемых чисел (ZIEHEN = 6)
  3. Создаем массив для хранения результатов (Ergebnis)
  4. Создаем переменные для хранения случайного числа (randomLotto), номера строки (i), номера столбца (j) и флага наличия числа в массиве (istLottoVorhanden)
  5. Инициализируем генератор случайных чисел (srand(time(NULL)))
  6. Выводим лото таблицу (печать заполняется через 7 строк)
  7. Заполняем массив Ergebnis случайными числами, проверяя наличие каждого числа в уже заполненной части массива (повторяем выбор, пока число не станет уникальным)
  8. Выводим результаты (числа) в консоль
  9. Возвращаем 0, завершая работу программы

Оцени полезность:

15   голосов , оценка 4.067 из 5