Solved

Unique, random 4 digit numbers

Posted on 2003-10-27
8
722 Views
Last Modified: 2010-04-15
I'm looking for a good method of creating 300 unique 4 digit random numbers. However, I'm unsure of how I can actually create these numbers (between 1000 and 9999), especially making them unique. Any help that can be offered is greatly appreciated.
0
Comment
Question by:Tabris42
  • 5
  • 2
8 Comments
 
LVL 1

Accepted Solution

by:
guitardude101 earned 250 total points
ID: 9631430
the secret to make sure they are unique is to use some type of hash table
in this example I allocate an array and use the subscript to see if I did that number yet. If I did not I mark the number taken by putting a 1 in it.

my random number functions parameters
randomnummber array to store the generated numbers
size is the number of elements
low is lowest number to generate
high is the highest number to generate

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

int main(int argc, char **argv);
void createrandomnumbers(int randomnummber_array[], int size, int low, int high);

int main(int argc, char **argv)
{
      int randomnumbers[300];
      createrandomnumbers(randomnumbers, 300, 1000, 9999);

      return 0;
}



void createrandomnumbers(int randomnummber_array[], int size, int low, int high)
{
      int index;
      int randomnumber;
      int *hashtable;
      size_t bytestoallocate;

      bytestoallocate = ((high - low) + 1) * sizeof (int);
      hashtable = (int*) malloc(bytestoallocate);
      if (hashtable)
      {
            memset(hashtable, 0, bytestoallocate);
            
            for (index = 0; index < size; index++)
            {
                  while (1) {
                        randomnumber = (rand() % (high -low)) + low;
                        if (hashtable[randomnumber] == 0)
                        {
                              randomnummber_array[index] = randomnumber;
                              hashtable[randomnumber] = 1;
                              break;
                        }
                  }
            }
            free(hashtable);
      }
}
0
 
LVL 1

Expert Comment

by:guitardude101
ID: 9631446
I just noticed 1 thing
  the line
       if (hashtable[randomnumber] == 0)
  should be
        if (hashtable[randomnumber - low] == 0)


and
     the line
       hashtable[randomnumber] = 1;
    should be
       hashtable[randomnumber - low] = 1;
0
 
LVL 30

Expert Comment

by:Axter
ID: 9631528
Just use srand with a time function.
Example code:

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

int main(int argc, char* argv[])
{
      int low = 1000, high= 9999, i;
      int randomnumbers[3000];
      srand( (unsigned)time( NULL ) );

      for(i = 0;i < sizeof(randomnumbers)/sizeof(int);++i)
      {
            randomnumbers[i] = (rand() % (high -low)) + low;

      }

      for(i = 0;i < sizeof(randomnumbers)/sizeof(int);++i)
      {
            printf("%i, ", randomnumbers[i]);

      }

      printf("\n\n");
      
      system("pause");
      return 0;
}

0
 
LVL 6

Expert Comment

by:Ajar
ID: 9631559
The following function tries to accomplish the  desired result in a intutive way.

void f()
{
     int r_numbers[300],i,j,flag;
     for(i=0;i <300;i++)
     {  
           flag = 1;
           while(flag)
           {
                 flag = 0;
                 r_numbers[i]= 1000 + (rand()%(9999-1000);
                 for(j = 0; j < i;j++) {if(r_numbers[i]==r_numbers[j]) {flag = 1;break}}
           }
     }
     
}
0
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 
LVL 1

Expert Comment

by:guitardude101
ID: 9631597
That would work but mine is orderes of magnitude faster and why post after a correct answer
srand will not insure you get unique numbers. It just changes the seed value.
0
 
LVL 1

Expert Comment

by:guitardude101
ID: 9631609
The reason why mine if faster is I only search 1 element to see if the number was already done.
Yours searches all previous numbers.
0
 
LVL 30

Expert Comment

by:Axter
ID: 9632757
>>srand will not insure you get unique numbers.

You're right.  I did not completely understand the question when I first read it.

However, your example should have a call to srand().
Otherwise, you'll get the same results everytime you run the program.

void createrandomnumbers(int randomnummber_array[], int size, int low, int high)
{
  srand( (unsigned)time( NULL ) );
// The rest of your code.......


0
 
LVL 1

Expert Comment

by:guitardude101
ID: 9633029
yep
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Have you thought about creating an iPhone application (app), but didn't even know where to get started? Here's how: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Important pre-programming comments: I’ve never tri…
This tutorial is posted by Aaron Wojnowski, administrator at SDKExpert.net.  To view more iPhone tutorials, visit www.sdkexpert.net. This is a very simple tutorial on finding the user's current location easily. In this tutorial, you will learn ho…
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use for-loops in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use switch statements in the C programming language.

863 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now