HackerRank中C#实现Diagonal Difference挑战测试失败求助
问题原因分析(针对你的测试用例输出3的情况)
最可能的原因是输入读取逻辑错误,把矩阵边长n也当成了矩阵元素填充到矩阵中,导致矩阵元素错位,最终计算出错误的对角线差。
你的测试用例输入是:
3 11 2 4 4 5 6 10 8 -12
如果代码将所有输入(包括第一行的3)合并成一个数组,然后从索引0开始填充矩阵:
- 矩阵第一行变成
[3, 11, 2] - 第二行变成
[4, 4, 5] - 第三行变成
[6, 10, 8]
此时计算对角线和:
- 主对角线:
3 + 4 + 8 = 15 - 副对角线:
2 + 4 + 6 = 12 - 绝对值差:
|15 - 12| = 3,正好和你提交后的输出一致。
另外可以排查的其他常见错误:
- 副对角线索引计算错误:比如误将副对角线写成
matrix[i][i](和主对角线重复),或者索引公式写错(比如用matrix[n-i][i]而非matrix[i][n-1-i])。但这种情况本地测试也会出错,和你描述的本地正常不符。 - 输入行读取不完整:比如只读取了部分行,导致矩阵未被正确填充,但这种情况通常会引发索引越界错误,你说无报错信息,可能性较低。
- 绝对值计算遗漏:如果直接输出主副对角线的差值而非绝对值,结果会是负数,但你的输出是3,不符合这个情况。
修复方案
针对最可能的输入读取错误,调整代码逻辑:
逐行读取输入,第一行获取矩阵边长n,后续每一行对应矩阵的一行,避免把n混入矩阵元素。示例代码:
int n = int.Parse(Console.ReadLine()); int[][] matrix = new int[n][]; for (int i = 0; i < n; i++) { matrix[i] = Console.ReadLine().Split(' ') .Select(int.Parse) .ToArray(); }
内容的提问来源于stack exchange,提问作者Nano Taboada
相关产品推荐
相关产品推荐

