You need to enable JavaScript to run this app. 为何同一C代码在CodeBlocks与Codeforces编译器运行结果不同
优惠活动
大模型
产品
解决方案
定价
更多

为何同一C代码在CodeBlocks与Codeforces编译器运行结果不同

Codeforces 116A题提交输出异常排查

问题原因

本地运行能拿到正确结果、平台输出随机异常值,是代码里两个逻辑问题导致的:

  • 索引写错触发内存越界
    代码循环算每站上车人数的时候,写了sum = sum + a[i][i]。题目里每站给两个数:第一个是该站下车的人数,第二个是该站上车的人数,对应二维数组的列位置是固定的:第0列存下车数,第1列存上车数。这里错把列索引写成了循环变量i:
    当i>=2的时候,数组第二维最大的合法索引是1,a[2][2]、a[3][3]这些位置根本不属于数组分配的内存,读出来的都是栈上的随机残留值。这种栈内存越界属于C语言的未定义行为,本地不会强制报错,看起来能跑出正确结果只是环境凑巧——本地CodeBlocks运行时,刚好这些越界位置的残留值凑上了正确的计算逻辑,能得到结果6;但平台的编译环境、栈内存排布和本地不一样,读出来的都是无意义的垃圾值,最后就输出了4221555这种异常大数。
  • 漏算第一站的载客量
    代码初始把max设成0,循环从第2站(i=1)才开始算最大值,根本没把第一站的车上人数拿来和max比。哪怕索引全写对,如果第一站上车的人数是全程最多的,算出来的结果也是错的。

修正方向

顺着问题调整两处逻辑即可:

  • 把读取上车人数的a[i][i]改成固定的a[i][1],确保所有数组访问都在合法内存范围内,杜绝读取随机值的问题。
  • 计算完第一站的初始车上人数后,先将该值与max做一次比较,把第一站的载客量纳入最大值统计范围。

内容的提问来源于stack exchange,提问作者Afif Al'Hasnain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.08 21:06:10