2015-11-18 2 views
2

Я написал программу, которая генерирует 4 случайных цифры, которые должны появляться на экране следующим образом: от 0000 до 9999 (не в порядке возрастания обязательно, конечно!).Создание неравных случайных чисел в C

Проблема в том, что я столкнулся с числами, которые равны друг другу. Как я могу это исправить? Я просто хочу произвести 10.000 номеров в диапазоне от 0000 до 9999, но не в любом порядке: просто «случайный».

Вот что я написал до сих пор:

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 
#include <assert.h> 
#define SIZE 10000 

int main(){ 

    srand(time(NULL)); 

    int a[SIZE], b[SIZE], c[SIZE], d[SIZE], i; 
    FILE *fd = fopen("combinations_rand.txt", "w"); 
    assert(fd); 

    for(i=0; i<SIZE; i++){  
     a[i] = rand()%10; //array of first digits 
     b[i] = rand()%10; //array of second digits, etc... 
     c[i] = rand()%10; 
     d[i] = rand()%10; 
     fprintf(fd, "%d%d%d%d\n", a[i], b[i], c[i], d[i]); 
    } 
    fclose(fd); 
} 
+0

Вы имеете ответ, вы говорите не в любом порядке ... это просто переупорядочение. –

+1

Если вы не хотите дублировать, то вам не нужно * случайное число *, вы хотите, чтобы * заданный * набор чисел * в случайном порядке *. –

+0

Когда я запускал программу, я имел номер 0844 два раза. И я не думаю, что только это число появляется дважды. Предположим, что я произвел числа таким образом: 0000, 0001, ..., 9999, не случайно. Как я могу их переупорядочить, чтобы казаться случайным? (вопрос к вашему комментарию.) – George

ответ

6

Возьмите массив 10000 длины и хранить элементы от 0 до 9999 в тех. Затем перетасовываем массив Shuffle array in C.

Затем выведите ответ с ведущими нулями при необходимости Printing leading 0's in C?

+1

Это отличный ответ. Я был готов, поэтому я все равно разместил его. –

2

Что вы должны сделать, это генерировать массив чисел от 0 до 9999, а затем смешать его, как этот

#include <stdio.h> 
#include <time.h> 
#include <stdlib.h> 

#define SIZE 10000 

int main() 
{ 
    int numbers[SIZE]; 

    srand(time(NULL)); 
    /* Fill the array */ 
    for (int i = 0 ; i < SIZE ; ++i) 
     numbers[i] = i; 
    /* Mix it */ 
    for (int i = 0, j = rand() % SIZE ; i < SIZE ; ++i, j = rand() % SIZE) 
    { 
     int swap; 
     swap = numbers[i]; 
     numbers[i] = numbers[j]; 
     numbers[j] = swap; 
    } 
    /* Display it */ 
    for (int i = 0 ; i < SIZE ; ++i) 
     fprintf(stdout, "%04d\n", numbers[i]); 
    return 0; 
} 
+1

за исключением того, что я считаю, что это приводит к смещению: см. Fisher-Yates shuffle. –

Смежные вопросы