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

CodeChef TLG问题C语言代码报错排查求助

排查CodeChef TLG问题的代码错误

问题说明

我是C编程新手,在CodeChef的TLG题目中遇到提交错误。题目规则是:台球比赛有多个回合,每回合两位玩家获得对应得分,每回合结束后计算双方累计得分,最终要找出所有回合中累计领先值最大的玩家作为胜者。我写了不使用数组的解法,但提交后显示错误,且看不到失败测试用例,需要帮忙排查。

输入输出要求

  • 输入:首行是回合数N(N ≤ 10000),后续N行每行是Player 1和Player 2的单回合得分
  • 输出:胜者编号W(1或2)和最大领先值L,两者用空格分隔

我的错误代码

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int N, a, b, cum1 = 0, cum2 = 0, lead = 0, leader = 0;
    scanf("%d", &N);

    while (N--) {
        scanf("%d%d", &a, &b);
        cum1 += a;
        cum2 += b;
        if (abs(cum1 - cum2) > lead) {
            lead = abs(cum1 - cum2);
            leader = cum1 > cum2 ? 1 : 2;
        }
    }
    printf("%d%d\n", leader, lead);
    return 0;
}

错误原因与修正

你的代码逻辑是正确的,核心问题出在输出格式上:

  • 题目要求胜者编号和最大领先值用空格分隔,但你的printf("%d%d\n", leader, lead);会把两个数字直接拼接输出(比如胜者1、领先10会输出110),完全不符合题目要求的格式,这是导致提交报错的主要原因。
  • 另外存在一个极端情况隐患:如果所有回合双方累计得分始终相等,leader会保持初始值0,输出0不符合题目要求的1或2,可以初始化leader为1来规避。

修正后的代码:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int N, a, b, cum1 = 0, cum2 = 0, lead = 0, leader = 1;
    scanf("%d", &N);

    while (N--) {
        scanf("%d%d", &a, &b);
        cum1 += a;
        cum2 += b;
        int current_diff = abs(cum1 - cum2);
        if (current_diff > lead) {
            lead = current_diff;
            leader = cum1 > cum2 ? 1 : 2;
        }
    }
    printf("%d %d\n", leader, lead);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:10:16