测试内容位在一个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;
}
此处为测试结果(图片)