生成随机UNIQUE并在C

时间:2017-01-27 09:19:44

标签: c random binary

我已经实现了一个基本程序,它可以生成10个随机和唯一的数字,从1到10,如下所示。我添加了一个额外的部分,其中我想要每个唯一和随机数的二进制表示。我的程序看起来像这样。

   int value=1, loop, loop1, get=0, x, arr[10], array[20], count, i =0, y;
   srand(time(NULL));

for (x = 0; x < 10; x++)
{
    for (count = 0; count < 10; count++) {
        array[count] = rand() % 10 + 1;     //generate random number between 1 to 10 and put in array
    }
    while (i < 10) {
        int r = rand() % 10 + 1;    // declaring int r 

        for (x = 0; x < i; x++)
        {
            if (array[x] == r) {    //if integer in array x is equal to the random number generated
                break;              //break
            }
        }
        if (x == i) {           //if x is equal to i then   
            array[i++] = r;         //random number is placed in array[10]
        }
    }
    for (y = 0; y < 10; y++) {
        printf("unique random number is %d\n", array[y]);
        array[y] = value;

        for (loop = 0; loop < 1000; loop++)
        {
            if (value <= 1) { arr[loop] = 1; break; }       //if value is 1 after dividing put 1 in array
            if (value % 2 == 0) arr[loop] = 0;
            else arr[loop] = 1;

            value = value / 2;
        }
        for (loop1 = loop; loop1 > -1; loop1--)
            printf("%d", arr[loop1]);
        printf("\n");
    }   
   }

我的问题是每个随机唯一编号的二进制值都是1.在这个程序中我看到我初始化value=1这可能是我的错误的来源,但是当我删除这个我收到一条错误,指出局部变量未初始化。

我的程序的第一部分生成唯一编号工作正常,但是我转换为二进制文件的第二部分不是。

编辑:我测试了我的程序的第二部分,并且它自己运行良好。问题必须是我将两个程序结合在一起的方式。

2 个答案:

答案 0 :(得分:0)

以下是注释代码:

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

//function to check unique random number 
int check(int array[],int count,int val)
{
    int i=0;
    for( ;i<count ;++i )
    {
        if (array[i]==val)
            return 1;
    }
    return 0;
}

int main(void)
{
    int value,loop, loop1, get, x, arr[10];
    int oldRandoms[10]; // array to preserve old random values

    srand(time(NULL));
    for (x = 0; x < 10; x++)
    {
        do // do while to get only unique random number 
        {
            get = rand() % 10 + 1;
        }while(check(oldRandoms,x,get));
        oldRandoms[x]=get; // backup the number 

        printf("random number is %d \n", get);
        value = get;

        for (loop = 0; loop < 1000; loop++)
        {
            if (value <= 1) { arr[loop] = 1; break; }   //if value is 1 after dividing put 1 in array
            if (value % 2 == 0) arr[loop] = 0;
            else arr[loop] = 1;

            value = value / 2;
        }
        for (loop1 = loop; loop1 > -1; loop1--)
            printf("%d", arr[loop1]);
        printf("\n");
    }
}

答案 1 :(得分:0)

语句array[y] = value使用常量1覆盖先前生成的随机值。写

  value = array[y];