dearMakiseKurisu 2019-10-27 21:26 采纳率: 100%
浏览 219
已采纳

运用随机数编写一个小测试,测试结果中1占比例过大不符合概率分布,需要怎么修改。(讲真的1~5好像都偏多,就是1比较明显)

测试内容位在一个16✖16的棋盘中,两个棋子[(0,0),(15,15)]同时进行移动,得到相遇的时候棋子走过的步数,测试进行一万次,得到平均值。

以下为代码:
#include
#include
#define random(x) (rand()%x)
using namespace std;
int create();
int move();
double SUM();
int main()
{
srand((int)time(0));
double result=SUM();
cout << "\n" << result;
}
int create()
{
int a = rand() % 4 + 1;
return a;
}
int move()
{
int x1 = 0, y1 = 0, x2 = 15, y2 = 15;
int random1, random2;
int sum = 0;
while (x1 != x2 || y1!=y2)
{
random1 = create();
random2 = create();
switch (random1)
{case 1:
{x1 = (x1 + 17) % 16;break;}
case 2:
{y1 = (y1 + 17) % 16;break;}
case 3:
{x1 = (x1 + 15) % 16;break;}
case 4:
{y1 = (y1 + 15) % 16;break;}
case 5:
{x1 = (x1 + 17) % 16;break;
y1 = (y1 + 17) % 16;break;}
case 6:
{x1 = (x1 + 15) % 16;break;
y1 = (y1 + 17) % 16;break;}
case 7:
{x1 = (x1 + 15) % 16;break;
y1 = (y1 + 15) % 16;break;}
case 8:
{x1 = (x1 + 17) % 16;break;
y1 = (y1 + 15) % 16;break;}}
switch (random2)
{case 1:
{x2 = (x2 + 17) % 16;break;}
case 2:
{y2 = (y2 + 17) % 16;break;}
case 3:
{x2 = (x2 + 15) % 16;break;}
case 4:
{y2 = (y2 + 15) % 16;break;}
case 5:
{x2 = (x2 + 17) % 16;break;
y2 = (y2 + 17) % 16;break;}
case 6:
{x2 = (x2 + 15) % 16;break;
y2 = (y2 + 17) % 16;break;}
case 7:
{x2 = (x2 + 15) % 16;break;
y2 = (y2 + 15) % 16;break;}
case 8:
{x2 = (x2 + 17) % 16;break;
y2 = (y2 + 15) % 16;break;}}
sum++;
}
return sum;
}
double SUM()
{
int Sum = 0;
int sum = 0;
double AVG;
int test = 0;
while (test < 10000)
{
sum = move();
printf("%10d\t", sum);
Sum += sum;
test++;
}
AVG = Sum / 10000;
return AVG;
}

此处为测试结果(图片)
图片说明

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2019-10-27 22:52
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败