You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

醉汉随机步行模拟代码异常:始终输出100步求助排查

问题分析与修复

核心问题:整数除法导致概率逻辑完全失效

代码里两处整数除法错误直接让随机移动逻辑彻底失效:

  • rand() / RAND_MAX:rand()和RAND_MAX都是整数类型,整数除法会直接舍弃小数部分。除非rand()恰好等于RAND_MAX,否则结果永远是0,这一情况几乎不会发生,所以randomnum的值几乎始终为0。
  • 1/3:同样是整数除法,结果直接为0,导致randomnum < 0的判断永远不成立,醉汉每次只会执行position +=1,从0到100刚好走100步,所以输出固定为100。

修复后的代码

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int randomStep(int position);

int main() {
  srand(time(NULL));
  int position = 0, countSteps = 0;
  const int HOME = 100;

  do {
    position = randomStep(position);
    countSteps++;
  } while (position < HOME);

  cout << "No of Steps to reach home : " << countSteps << endl;

  return 0;
}

int randomStep(int position) {
  // 转换为浮点数除法,生成0.0到1.0之间的随机数
  double randomnum = static_cast<double>(rand()) / RAND_MAX;

  // 用浮点数计算概率阈值,避免整数除法问题
  if (randomnum < 1.0/3.0) {
    position -= 1;
  } else {
    position += 1;
  }
  return position;
}

关键修复点

  • 将rand()强制转换为double后再除以RAND_MAX,得到0.0到1.0之间的有效浮点数随机值。
  • 用1.0/3.0代替1/3,确保得到正确的概率阈值(约0.333),让1/3后退、2/3前进的逻辑生效。

修改后,醉汉会按照设定的概率随机移动,步数结果将符合随机游走的预期,不再固定为100。

内容的提问来源于stack exchange,提问作者Damien Torres

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:15:45