有人能解决这个运行时错误吗?
Status :Time limit exceeded
Time:
5 secs
Memory:
5.368 Mb
Input
4 8 4
1 2 1 2 5
3 5 1 3 4
1 2 4 5 11
1 1 1 3 12
Runtime Error
SIGTSTP
#include <iostream>
using namespace std;
int main() {
// your code goes here
int n,m,k,cert=0;
cin>>n>>m>>k;
int a;
for(int z=0;z<n;z++)
{
int sum=0;
for(int i=0;i<k;k++)
{
cin>>a;
sum+=a;
}
cin>>a;
if(sum>=m && a<=10)
cert++;
}
cout<<cert;
return 0;
}
这是因为您的代码运行时间很长。
看看这个循环:
for (int i = 0; i < k; k++) {
k
将增加,而i
保持在0
,因此i < k
将始终是true
。
当k
在某个时刻达到其极限INT_MAX
,而您执行k++
时,它将导致有符号整数溢出,因此程序具有未定义的行为。
如果不知道你的代码应该做什么,就不可能给出如何使其工作的确切建议,但我怀疑你想要的是:
for (int i = 0; i < k; i++) {
有人已经回答了这个问题,但还有一件有趣的事情要讨论。我注意到这个问题是因为它有cppcheck标记。我猜你无意中碰到了一个令人兴奋的话题:(。正如我所看到的,这是你的第一个问题,所以也许你认为";cppcheck";标签的意思是";我的代码有问题。你能检查一下吗&";。实际上;cppcheck";是用于在C和C++中搜索代码错误的静态分析器的名称。
嗯,我觉得这个主题很有趣,因为实际上静态分析可以很容易地检测到上面代码片段中的错误。使用静态分析器,您不需要问这样的问题。因此,分析器可以节省您的时间——它们将帮助检查您的代码并发现错误。
不幸的是,Cppcheck没有找到错误——我去了CppcheckOnline Demo网页,检查了这个问题的代码片段。不幸的是,这个分析器没有发出任何关于循环的警告。分析器并不完美,尤其是这种相对简单的静态分析器。但它至少有两个优点——它是免费的和开源的。
嗯,我没有放弃——我用了另一个分析仪。这就是PVS Studio静态分析器的联机模式:https://godbolt.org/z/TEsdeG7oM
你能想象吗?PVS Studio发出了描述此错误的警告:V683请考虑检查循环表达式。可能应该增加i
变量而不是k
变量。
我希望你会发现这些信息足够有用和有趣,可以更有效地使用静态分析器的线索来学习C++。