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

问题描述

| 我正在编写一个程序,该程序必须生成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;
}
    

解决方法

         这部分没有任何意义:
if(array[i]==0)
   array[i]=1;
它将您的选择限制为N-1个数字(1到N-1),从中您尝试不重复地找到N个数字-导致无限循环。
if((i-j)==1)
   continue;
在这里,您可能需要
if (i==j)
来检查先前的循环是否已完成。 以随机顺序生成数字0..N-1的更快,更简单的方法是将这些数字放入数组(按顺序排列),然后使用Fisher-Yates随机播放对数组进行随机播放。     ,        这种方法是有偏见的。请勿将其用于教育目的。 除了使用另一个数组的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
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...