注册 登录
编程论坛 C++教室

C++ 程序解决醉汉行走问题

行者3 发布于 2014-11-08 21:19, 2762 次点击
一名醉汉每次在前后左右四个方向中随机选择一个方向走一米,请问走了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,不知道哪里错了
2 回复
#2
stop12042014-11-11 07:56
因为你的值溢出了
#3
stop12042014-11-11 07:57
只要在代码中加入一些反馈信息即可知道问题出现在哪里,而且你随机出来的数是固定的.所以direction也是固定的.自己试试看
程序代码:
//for后面放入这句
        cout << "a=: " << a
             << "b=: " << b
             << "c=: " << c
             << "d=: " << d << endl;
        l = k + sqrt((a - b) * (a - b) * 1.0 + (c - d) * (c - d) * 1.0);
        cout << "l:" << l << endl;

// while (m <= 5) 的情况下,   思考m<=1e5
a=: 0b=: 0c=: 5d=: 0
l:5
a=: 0b=: 0c=: 10d=: 0
l:15
a=: 0b=: 0c=: 15d=: 0
l:30
a=: 0b=: 0c=: 20d=: 0
l:50
a=: 0b=: 0c=: 25d=: 0
l:75
a=: 0b=: 0c=: 30d=: 0
l:105
Hello world!


[ 本帖最后由 stop1204 于 2014-11-11 08:02 编辑 ]
1