关于生成随机数,有个问题想问各位大佬就如图片显示的,这三组数
c4droid吧
全部回复
仅看楼主
level 12
关于生成随机数,有个问题想问各位大佬就如图片显示的,这三组数据都是由rand()生成的,每一行都可以看成是一个坐标,这三组数据分别在三个子程序中生成,第一组指的是推箱子中墙的坐标,第二组是要推动的箱子的坐标,第三组是箱子的目的地的坐标,然而为什么第二组和第三组的某些数据出现了大量"巧合"?虽然不是每一次运行都会这样,但出现这种"巧合"概率却是不小,求解答。
2017年11月22日 07点11分 1
level 12
//子程序和预处理部分
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
int zhongzhuan[5][2];
void random_wall()
{
int sum1,sum2=0;
printf("初始化数据中……\n");
sleep(1);
clrscr();
srand(time(0));
sum1=rand()%5;sum1++;
for (sum2;sum2<sum1;sum2++)
{
do
{
zhongzhuan[sum2][0]=rand()%48;
zhongzhuan[sum2][0]+=2;
zhongzhuan[sum2][1]=rand()%18;
zhongzhuan[sum2][1]+=2;
}while(zhongzhuan[sum2][0]==25&&zhongzhuan[sum2][1]==10);
}
}
void random_box1(int sum1,int wall[5][2])
{
int sum2,sum3;
printf("初始化数据中……\n");
sleep(1);
clrscr();
srand(time(0));
for(sum2=0;sum2<sum1;sum2++)
{
do
{
do
{
zhongzhuan[sum2][0]=(rand()%46)+2;
zhongzhuan[sum2][1]=(rand()%16)+2;
}while (zhongzhuan[sum2][0]==25&&zhongzhuan[sum2][1]==1);
for (sum3=0;wall[sum3][0]!=0;sum3++)
{
if (zhongzhuan[sum2][0]==wall[sum3][0])
{if(zhongzhuan[sum2][1]==wall[sum3][1])sum3=10;}
}
}while(sum3==10);
}
}
void random_box2(int sum1,int wall[5][2])
{
int sum2,sum3;
printf("初始化数据中……\n");
sleep(1);
clrscr();
srand(time(0));
for(sum2=0;sum2<sum1;sum2++)
{
do
{
do
{
zhongzhuan[sum2][0]=(rand()%46)+2;
zhongzhuan[sum2][1]=(rand()%16)+2;
}while (zhongzhuan[sum2][0]==25&&zhongzhuan[sum2][1]==1);
for (sum3=0;wall[sum3][0]!=0;sum3++)
{
if (zhongzhuan[sum2][0]==wall[sum3][0])
{if(zhongzhuan[sum2][1]==wall[sum3][1])sum3=10;}
}
}while(sum3==10);
}
}
2017年11月22日 07点11分 2
level 12
//主函数部分
int main()
{
int a,b,c,sum1;
int wall[5][2];
int box1[5][2];
int box2[5][2];
srand(time(0));
random_wall();
for (a=0;a<5;a++)
{
wall[a][0]=zhongzhuan[a][0];
wall[a][1]=zhongzhuan[a][1];
}
sum1=(rand()%5)+1;
random_box1(sum1,wall);
for (a=0;a<5;a++)
{
box1[a][0]=zhongzhuan[a][0];
box1[a][1]=zhongzhuan[a][1];
}
random_box2(sum1,wall);
for (a=0;a<5;a++)
{
box2[a][0]=zhongzhuan[a][0];
box2[a][1]=zhongzhuan[a][1];
}
for(a=0;a<5;a++)
{
printf("%d\\%d\n",wall[a][0],wall[a][1]);
}
printf("\n\n");
for(a=0;a<5;a++)
{
printf("%d\\%d\n",box1[a][0],box1[a][1]);
}
printf("\n\n");
for(a=0;a<5;a++)
{
printf("%d\\%d\n",box2[a][0],box2[a][1]);
}
}
2017年11月22日 07点11分 3
level 12
还有个很奇怪的就是每次出现这种"巧合"总是后面几行的数据,第一行从来没出现过
2017年11月22日 07点11分 4
level 10
(我怀疑)你第二和第三个组,巧合是第3~5号数据没有重新赋值
2017年11月22日 08点11分 5
我发现问题了,真像你所说的没有赋值,但不是第二组数据的错,而是第一组,谢谢你了[吐舌]
2017年11月22日 10点11分
level 10
你试下在把二组数据定死,看看第三组还是不是一样
2017年11月22日 08点11分 6
level 14
srand这个函数在整个程序中调用一次就可以了,超过一次的话不但没有意义还可能出现不理想的随机结果。
2017年11月22日 10点11分 7
好的,了解,谢谢指导
2017年11月22日 13点11分
1