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
相关产品推荐
相关产品推荐

