c++ 产生一组互不相同的随机数问题

要随机产生0-——53之间的数,共54个,且互不重复,以下是我的代码,为何没结果输出?求大神找错#include<iostream>#include<time.h>usi... 要随机产生0-——53之间的数,共54个,且互不重复,以下是我的代码,为何没结果输出?求大神找错

#include<iostream>
#include<time.h>
using namespace std;
void main(){
srand((unsigned)time(0));
int j=0,a[100];
a[0]=rand()%54;
int i=1;
int m;
int flag;
while(i<55)
{
flag=0;
m=rand()%54;
for(int k=0;k<i;k++)
if(m==a[k])
flag++;
if(flag==0)
a[i++]=m;
}
for(int jj=0;jj<i;jj++)
cout<<a[jj]<<endl;

}
j=0是多余的
展开
 我来答
memberwin
推荐于2016-02-08 · TA获得超过3903个赞
知道大有可为答主
回答量:1000
采纳率:100%
帮助的人:520万
展开全部
while(i<55)这个条件错了, 应该是while(i<54)
具体原因是rand()%54的结果肯定在0-53之间,共54个,一旦数组a中存储了54个元素后,后续所有的rand()%54都必定与a中的某个元素相同,所以flag就不是0了,i++也就不会再执行, i也就一直是54一直满足while条件,一直死循环了。
更直接的说,i实际就是目前有效的随机数个数,所以一旦达到54就应该退出循环,所以应该是i<54
来阿里飞
2014-04-10 · 超过12用户采纳过TA的回答
知道答主
回答量:55
采纳率:0%
帮助的人:10.7万
展开全部
  模54只能产生54个不同的随机数
  而while循环的判定条件是:i<55

  要求55个不同的随机数,这是不可能的,所以程序一直停留在这个循环中,没有输出结果

  把判定条件改成 i<54 就行了
  另外main函数的返回值应该是 int 类型吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小狗鄙视猫
推荐于2018-04-19
知道答主
回答量:14
采纳率:0%
帮助的人:13万
展开全部
是的 产生了55个。while()循环中虽然只产生54个下标从1..54 但是你 之前已经赋值了a[0]=rand()%54;
所以 总共产生了 55个 ,while结束不了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小奥黑莓派
2014-04-10 · TA获得超过2816个赞
知道小有建树答主
回答量:1004
采纳率:0%
帮助的人:819万
展开全部
楼主 我不会告诉你 你产生了55个数,导致你的循环逻辑出现错误。
好吧 我说清楚一点,就是你产生是55个数,产生的方法是rand()%54,那么,你的第55个数,就必然和前面的一个相同,于是,死循环了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式