Generating Unique Random Numbers in an Array using Loop

15,902

Solution 1

What you want is a shuffle algorithm

Shuffle array in C

To get your 25 element array of unique #s from 1 to 100; just create a 100 element array with the numbers 1..100, shuffle the 1st 25 from the pool of 100, and use the 1st 25.

$ cat test.c
    #include <stdio.h>
    #include <stdlib.h>

    void shuffle(int *array, size_t array_size, size_t shuff_size)
    {   
        if (array_size > 1)  
        {   
            size_t i;
            for (i = 0; i < shuff_size - 1; i++) 
            {   
              size_t j = i + rand() / (RAND_MAX / (array_size - i) + 1); 
              int t = array[j];
              array[j] = array[i];
              array[i] = t;
            }   
        }   
    }   

  int main(int argc, char * argv[]) {
        int a[100];
        int b[5][5];
        int i,j,k=0;

        for(i=0; i<100;++i)
            a[i]=i;

        shuffle(a,100,25);

        for(i=0;i<5;++i)
            for(j=0;j<5;++j) {
                b[i][j] = a[k++];
                printf("%d ",b[i][j]);
        }
        printf("\n");
    }   

$ gcc -o test test.c

$ ./test
0 14 76 47 55 25 10 70 7 94 44 57 85 16 18 60 72 17 49 24 53 75 67 9 19 

Solution 2

Think of it like a deck of 100 cards.

  • Create a 100 element array holding the card numbers (1..100)
  • Shuffle the array (=deck). (see @koodawg's answer and @Steve314's comment)
  • "Deal" yourself the first 25 cards off the deck, into your 5x5 array.
Share:
15,902
Sam Liew
Author by

Sam Liew

Updated on June 04, 2022

Comments

  • Sam Liew
    Sam Liew over 1 year

    So the question is to develop a [5][5] table, each containing unique numbers from 1-100 (no duplicates)

    so here's what I came up with:

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main()
    {
        int outerLoop;
        int innerLoop;
    
        int board[5][5]; /* Array Name And Size*/
    
    /* seeds the random number generator*/
    
    srand(time(NULL));
    
    int number;
    
    number = rand() % 101;
    
    /* Start a loop to generate a random integer between 1 and 100 and 
    assign it into the array. The loop runs 25 times*/
    
    for (  outerLoop = 0  ;  outerLoop <= 25  ; outerLoop++ ) /* loop 25 times*/
    {
        for (  innerLoop = 0  ;  innerLoop <= 4  ; innerLoop++   ) /* <=4 due to 5
    columns*/
        {
            board[outerLoop][innerLoop] = rand() % 100 + 1;
        }
        printf( "%d \n", board[outerLoop][innerLoop] );
    }
    

    So I pretty much got stuck here.I'm not really sure about this:

    board[outerLoop][innerLoop] = rand() % 100 + 1;
    

    I simply made it up :/ Any idea guys?