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

CSES入门题:数字螺旋计算结果不符的错误排查与修复求助

数字螺旋问题的计算错误修复

问题场景

在解决数字螺旋问题时,输入坐标956420707 85755464时,代码输出结果为914740568692624386,但正确预期输出是914740566951293900。手动计算结果和代码输出一致,说明核心的公式推导存在错误。

原逻辑的问题

原推导的公式忽略了数字螺旋的奇偶行/列方向差异:

  • 原逻辑认为(n,n)处的值是n² -n +1,并统一用该值加上row-column得到结果
  • 但实际上数字螺旋的填充方向会随行/列的奇偶性变化:
    • 奇数行(行号≥列号):从右向左递减,(row, row)的值是row²,(row, column)的正确值为row² - column +1
    • 偶数行(行号≥列号):从左向右递增,(row, row)的值是(row-1)² +1,(row, column)的正确值为(row-1)² + column
    • 奇数列(列号>行号):从上向下递增,(column, column)的值是(column-1)² +1,(row, column)的正确值为(column-1)² + row
    • 偶数列(列号>行号):从下向上递减,(column, column)的值是column²,(row, column)的正确值为column² - row +1

原公式没有区分这些情况,导致大数值计算时出现偏差。

修复后的代码

#include <iostream>
using namespace std;

long long square(long long x) { return x * x; }

int main() {
    long long test_count;
    cin >> test_count;

    while (test_count--) {
        long long row, col, val;
        cin >> row >> col;
        
        if (row >= col) {
            if (row % 2 == 1) {
                val = square(row) - col + 1;
            } else {
                val = square(row - 1) + col;
            }
        } else {
            if (col % 2 == 1) {
                val = square(col - 1) + row;
            } else {
                val = square(col) - row + 1;
            }
        }
        
        cout << val << endl;
    }

    return 0;
}

验证说明

对于输入956420707 85755464:

  • 行号956420707是奇数且大于列号,代入公式row² - col +1
  • 计算后结果与预期输出914740566951293900一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 08:33:42