C语言程序产生不重复随机数

include#include#includevoid main(){int original[10][10];int m,n,i,j,l,s;scanf("%d,%d",&n,&m);srand(time(0)); for(i=0;i<=n-1;i++) { for(j=0;j<=m-1;j++) { A: original[i][j]=rand()%53+1; for(s=0;s<=i;s++) for(l=0;(l<=j)&&(!((s==i)&&(l==j)));l++) if(original[i][j]==original[s][l]) goto A; } }for(i=0;i<=n-1;i++) for(j=0;j<=m-1;j++) printf("%4d",original[i][j]);system("pause"); } 为什么执行程序后很容易有重复数字,是判断重复条件错了还是哪儿出错了?C还有没有别的实现不放回随机抽取一定范围内数字的方法?

#include<iostream>
#include<time.h>
#include<stdlib.h>
using namespace std;
int main()
{
int i,j;
int n[10]; //要产生10个随机数
int n1=100; //100个随机数
int n2=51; //从50开始
// n[0]=rand()%n1+n2;//产生50-150的随机数
srand((unsigned)time(NULL));
for(i=0;i<10;i++)
{
n[i]=rand()%n1+n2;
while(1) //判断是否重复
{
for(j=0;j<i;j++)
{
if(n[i]==n[j])
{
n[i]=rand()%n1+n2;
j=0;
break;
}
}
if(j==i)//新随机数与前面几个随机数都不重复
break;
}
printf("%d\n",n[i]);//产生从50-150的随机数
}
return 0;
}
//你发的程序少太多东西也不清楚你要表达什么意思,唯一理解的是你提出的要求,我编了一个程序可以产生不重复随机数但是不知道有没有系统函数可以这样做,把n1改成10很明显可以看见程序是符合要求的
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答