抓破头皮都想不通,程序错在哪儿了!(随机数问题)

ztwz 2004-10-16 12:10:24
这是一个产生随机数的程序,sizes大小为100,我想产生1-150之间的无从复随机数,但怎么死活都有从复的数,我不知道错在哪儿了!请大虾们帮我看看!谢谢
void rndrang(int n[],int sizes)
{
int j,k,temp,i=0;
srand(time(NULL)); //用时间做种子
n[sizes]=0;
while(i<sizes)
{
k=rand()%150+1; //产生一个随机数
for(j=0;j<=i;j++)//与前面的数比较是否有相同的!
{
if(k!=n[j])
{
n[i]=k;+
i++;
break;
}
}
}
}
...全文
136 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
双杯献酒 2004-10-16
  • 打赏
  • 举报
回复
运行结果;
70 104 11 123 146 148 108 136 118 10

134 52 145 122 62 55 33 113 53 111

127 124 5 95 25 6 28 30 112 76

114 92 137 23 4 20 78 43 42 18

15 34 125 84 16 119 116 71 133 94

21 61 64 129 59 79 109 65 107 13

139 126 131 142 32 85 98 29 87 141

39 80 12 66 57 132 88 40 90 130

74 47 2 138 69 100 81 56 41 105

67 91 17 120 37 44 82 147 3 9

请按任意键继续 . . .
双杯献酒 2004-10-16
  • 打赏
  • 举报
回复
// Dev C++ 4.9.8.0
#include <iostream>
#include <cstdlib>
#include <cstdio>

using namespace std;

void rndrang(int n[],int sizes);
int main(int argc, char *argv[])
{
const int sizes = 100;
int n[sizes] = {0};

rndrang(n,sizes);
// 显示
for(int i=0;i<sizes;i++)
{
cout << n[i] << "\t";
if(i%10 == 9) cout << endl;
}

system("PAUSE");
return 0;
}

void rndrang(int n[],int sizes)
{
int j,k,temp,i=0;
srand(time(NULL)); //用时间做种子
//n[sizes]=0; // 越界!!
while(i<sizes)
{
k=rand()%150+1; //产生一个随机数
bool bSame = false;
for(j=0;j<i;j++)//与前面的数比较是否有相同的!
{
if(k ==n[j])
{
bSame = true;
break;
}
}
if(!bSame)
{
n[i] = k;
i++;
}
}
}
WuYL7812 2004-10-16
  • 打赏
  • 举报
回复
不好意思,没看清楚。
WuYL7812 2004-10-16
  • 打赏
  • 举报
回复
先调用
srand(unsigned int)
比如
srand(time(0));
time(0)求当前时间,保证每次调用都是不一样的种子
yujinchi 2004-10-16
  • 打赏
  • 举报
回复
不行吧,if "error"
update : {if(k==n[j])
break;
else {n[i]=k;break;}
}
i++;
}
大熊猫侯佩 2004-10-16
  • 打赏
  • 举报
回复
你没有初始化随机数种子
yangfasheng 2004-10-16
  • 打赏
  • 举报
回复
if(k!=n[j])
{
n[i]=k;+
i++;
break;
}
这一段有问题,
改啦一下,在我机子上运行正常:VC++6。0
#include "stdafx.h"
#include <stdlib.h>
#include <iostream.h>
#include <string.h>
#include <time.h>
//using namespace std;

void rndrang(int n[],int sizes);


int main(int argc,char *argv[])
{
const int sizes = 10;
int n[sizes] = {0};

memset(n,0,sizes);

rndrang(n,sizes);
// 显示
for(int i=0;i<sizes;i++)
{
cout << n[i] << "\t";
if(i%10 == 9) cout << endl;
}

return 0;
}

void rndrang(int n[],int sizes)
{
int j,k,i=0;
srand(time(NULL)); //用时间做种子
memset(n,0,sizes);
while(i<sizes)
{
k=rand()%150+1; //产生一个随机数
for(j=0;j<i;j++)//与前面的数比较是否有相同的!
{
if(k!=n[j])
{
n[i]=k;
}
else
break;
}
if(j<i)//如果前面的数组元素中已经有相同的数,则重新产生一个随机数.
i--;
i++;
}
}

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧