繁体   English   中英

请帮忙。 生成随机数的程序不起作用

[英]Please help. The program for generating random numbers is not working

我正在编写一个程序,必须生成N个随机而不是重复的数字

原型应该是voidrandom_int(int array [],int N); 它没有任何错误,但它没有工作。 甚至没有任何数字

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


void random_init(int array[], int N)
{
   srand(time(NULL));
   int i, j;
   array[0]=rand()%N;
   for(i=1;i<N;i++)
   {
       array[i]=rand()%N;
       if(array[i]==0)
           array[i]=1;

       for(j=0;j<i;j++)
       {
           if(array[i]==array[j])
           break;
       }
       if((i-j)==1)
           continue;
       else
           i--;
   }
}

int main(void)
{
    int a[5], i, N;
    N=5;
    random_init(a,N);
    for(i=0;i<N;i++)
    printf("%d    ", a[i]);
    return 0;
}
  1. 这部分毫无意义:

     if(array[i]==0) array[i]=1; 

    它会将你的选择限制在N-1个数字(1到N-1),你试图在不重复的情况下找到N个数字 - 导致无限循环。

  2.  if((ij)==1) continue; 

    在这里你可能想要if (i==j)来检查前一个循环是否运行完成。

以随机顺序生成数字0..N-1的更快更简单的方法是将这些数字放在一个数组中(按顺序排列),然后使用Fisher-Yates Shuffle对数组进行洗牌。

这种方法有偏见。 除教育用途外,请勿使用它。

除了使用另一个数组的Ficher-Yates之外,您可以使用遍历所有可用数字的方法并为它们找到“随机”点(有效地“初始化”数组两次)。 如果拍摄该地点,请选择下一个。 像这样的东西,在伪代码中:

 fill array with N for all numbers from 0 to N-1 find a random spot while spot is taken (value is N) consider next spot /* mind wrapping */ set value in current spot 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM