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

Processing中Pi近似代码未通过Codegrade自动评分问题排查

问题排查与修正方案

你的代码核心逻辑完全偏离了蒙特卡洛近似Pi的原理,这是导致Codegrade不通过的根本原因,同时输出格式也不符合要求,具体问题和修正如下:

核心逻辑错误(最关键)

蒙特卡洛近似Pi的原理是:统计落在圆内的点数占总点数的比例,再乘以4(正方形面积为(2r)²=4r²,圆面积为πr²,推导得π=4*(圆内点数/总点数))。但你当前代码直接用已知的PI计算M,等于用Pi推导Pi,完全没有统计点数,这是致命错误。

其他问题

  • 缺少用于统计的变量:没有累计圆内点数和总点数
  • 输出格式错误:println每次输出新行,不符合“同一行打印结果”的要求
  • 无终止逻辑:draw()会无限循环生成点,导致输出无限多结果

修正后的代码

float xM = 200.0;
float yM = 200.0;
int insideCount = 0;
int totalCount = 0;

void setup() {
  size(400, 400);
  background(255);
  circle(200, 200, 400);
}

void draw() {
  // 生成随机点
  float x = random(0, 400);
  float y = random(0, 400);
  totalCount++;
  
  // 判断点是否在圆内
  float distance = sqrt(pow(xM - x, 2) + pow(yM - y, 2));
  if (distance <= 200) {
    insideCount++;
    stroke(0, 255, 0);
  } else {
    stroke(255, 0, 0);
  }
  point(x, y);
  
  // 计算Pi近似值
  float piApproximation = (insideCount / (float)totalCount) * 4;
  
  // 同一行覆盖输出结果
  System.out.print("\rPi近似值: " + piApproximation);
  
  // 设定终止条件,避免无限循环
  if (totalCount >= 10000) {
    noLoop();
    System.out.println("\n计算完成");
  }
}

修正说明

  1. 添加insideCount和totalCount变量,分别统计圆内点数与总点数
  2. 移除错误的M、N变量,改用点数比例计算Pi近似值
  3. 使用System.out.print("\r" + ...)实现同一行输出,\r会将光标移到行首覆盖原有内容
  4. 添加终止条件,当总点数达到10000时停止循环
  5. 简化距离计算写法,逻辑保持一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 07:55:15