【问题标题】:I have a Time Limit Exceeded error in Program C. How do I overcome it? [duplicate]我在程序 C 中遇到了 Time Limit Exceeded 错误。我该如何克服它? [复制]
【发布时间】:2020-05-15 06:51:49
【问题描述】:

c performance profiling time-limiting 链接上给出了编写程序的目的的详细信息:https://www.spoj.com/problems/CRCLE_UI/ 并且错误超过了时间限制

#include <stdio.h>

int main()
{
    int T;
    long long a,b,hasil=1;
    scanf("%d",&T);
    while (T--){
        scanf("%lld %lld",&a,&b);
        for (int i=b;i>(b-a);i--){
            hasil=hasil*i;
        }
        printf("%lld\n",hasil);
        hasil = 1;
    }
}

【问题讨论】:

  • 问题应该是自包含的。基本信息不应出现在某些外部链接中。
  • 为什么你两次发布完全相同的问题,涉及完全相同的练习,但源代码完全不同!? stackoverflow.com/questions/61811741/…
  • 除了算法的准确性之外,您还有int i = blong long...,所以您可能只是以无限循环结束...试试long long i=b;...
  • 你的意见是什么?
  • @RobertSsupportsMonicaCellio C

标签: c loops compiler-errors integer long-integer


【解决方案1】:

我该如何克服它?

for (int i = b; i > (b - a); i--) { ...

int i 更改为long long i 或至少long i。这解决了我对您的代码进行测试时出现的“Killed - processing time exceeded”错误。

Online Example


注意:我目前正在寻找为什么会出现此错误,int i

【讨论】:

  • int i 收到投诉,因为b - a 很容易超出int 的数量级——导致有符号整数溢出——UB。
  • @RobertSsupportsMonicCellio 谢谢解答,我在SPOJ上试过了,结果还是一样,时间有限。
  • @RobertSsupportsMonicaCellio 还有其他解决方案吗?
  • 嗯,我刚刚检查了 gcc 10.1.0——我没有收到任何投诉——我们将不得不等待你的研究:)
  • 问题陈述表明 n 和 k 可能各有千位。将int 更改为long long 可能会使程序的行为从运行时间过长变为产生不正确的结果,尤其是在您和/或 OP 正在使用的测试用例中,但它不会修复程序以便解决提出问题。
猜你喜欢
  • 2015-12-04
  • 2021-08-08
  • 2020-05-21
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 2015-06-29
  • 1970-01-01
相关资源
最近更新 更多