【发布时间】:2022-01-23 20:56:38
【问题描述】:
在 CodeChef 网站 problem SQUIDRULE 提交后它给了我一个运行时错误,但是当我运行程序时它给了我正确的答案并且运行成功。
#include <stdio.h>
int main(void) {
int T, s, a[1000], b[100];
scanf("%d", &T);
while (T--) {
scanf("%d", &s);
for (int i = 1; i <= s; i++) {
scanf("%d", &a[i]);
}
for (int i = 1; i <= s; i++) {
int sum = 0, c;
for (int j = 1; j <= s; j++) {
sum = sum + a[j];
}
c = sum - a[i];
b[i] = c;
}
for (int i = 1; i <=s; i++) {
for (int j = i + 1; j <=s; j++) {
if (b[i] > b[j]) {
int c;
c = b[i];
b[i] = a[j];
b[j] = c;
}
}
}
printf("%d\n",b[s]);
}
return 0;
}
【问题讨论】:
-
这段代码应该做什么?你遇到了什么错误?
-
因为您的代码运行时间过长。您需要重新设计算法以提高效率。
-
一般来说,像这样的代码挑战需要你想出聪明的解决方案。对于大量输入,明显的迭代解决方案将失败。
-
C 中的数组索引是基于 零 的。不要使用基于 1 的索引。如果您使用适当的教学或学习资源(例如好书和上课),这些东西就会被教授和学习。所谓的“竞赛”和“在线评判”网站不是教学或学习资源。
-
您的意见是什么?在某些输入上,
T在while(T--)之前保持未初始化,这会导致未定义的行为。
标签: c runtime-error