C++ 程序解决醉汉行走问题
一名醉汉每次在前后左右四个方向中随机选择一个方向走一米,请问走了n步之后该醉汉离出发位置有多远?请绘制出距离与步数之间的关系。二、分析问题
由于每次走的路径都不相同,因此每次走了n步后离出发位置的距离可能不相同,因此需要模拟m次,然后求出这m次的平均值。
通过电脑产生n个1到4的随机数,分别代表前、后、左、右。其中向前a步,向后b步,向左c步,向右d步。(其中a+b+c+d=n)再通过s= 计算出行走后距原点的距离。
按照上述方式重复m次,得到m个距离值 、 ,再求加权平均,得到行走n步的平均距离s.
#include <iostream>
#include<cmath>
#include<cstdlib>
#include<ctime>
using namespace std;
int main()
{ int i,m,n,direction,a,b,c,d;
double k,l;
cout<<"请输入醉汉行走的步数n:";
cin>>n;
a=0;b=0;c=0;d=0;
k=0;
m=0;
while(m<=1e5){
for(i=1;i<=n;++i){
srand(time(NULL));
direction=rand()*4/(RAND_MAX+1)+1;//direction生成方向 1、2、3、4分别代表前后左右;
switch(direction){
case 1:a+=1;break;
case 2:b+=1;break;
case 3:c+=1;break;
case 4:d+=1;break;
}
}
l=k+sqrt((a-b)*(a-b)*1.0+(c-d)*(c-d)*1.0);
k=l;
m+=1;
}
l=l/m;
cout<<"醉汉行走的平均距离是:"<<l<<endl;
cout << "Hello world!" << endl;
return 0;
}
运行结果总是-1.IND,不知道哪里错了