2 wat  wat__ 于 2016.04.05 21:16 提问

大一刚转专业的,请问下,代码在acm中时间超限为什么 5C
c++

#include
using namespace std;
int main()
{
int n, a[50], i,j,num,max,count;
while (cin >> n)
{

if (n == 0)
break;
max = 0;
num = 1;
for (i = 0; i < n; i++)
{
cin >> a[i];
if (a[i] == 0) break;
if (a[i]>max) max = a[i];
num = num*a[i];
}
for (j = max; j <= num; j++)
{

count = 0;
for (i = 0; i < n; i++)
{
if (j%a[i] == 0)
count++;
}
if (count== n)
{
cout << j << endl;
break;
}
}
}
return 0;
}

4个回答

Zafu_Rookie
Zafu_Rookie   2016.04.05 22:36

Time Limit:3000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u
acm题目都有上面这样的运行时间与内存上限的,
TLE的原因一般是你的程序时间复杂度太高(刚做acm的可能会是写了个死循环),达不到题目的要求

wat__
wat__ 能告诉我哪里出现了死循环吗,我刚接触不太懂。
一年多之前 回复
wat__
wat__ 能告诉我哪里出现了死循环吗,我刚接触不太懂。
一年多之前 回复
qq_31014729
qq_31014729   2016.04.06 00:42

你用了一个while里面有两层for循环,不看while的话时间复杂度就是n^2,也就可能acm里的2000MS,你再仔细算一下你的时间复杂度,碰到这种问题应该还是算法不够好,再想想别的办法

wat__
wat__ 回复qq_31014729: 不知道怎么算时间
一年多之前 回复
qq_31014729
qq_31014729 可以尝试将两个for(i=0;i<n;i++)写在一起,简化一样算法
一年多之前 回复
qq_34551335
qq_34551335   2016.04.05 21:23

ACM的题不都是有一个时限吗?就是规定你的程序运行时间不长于它。

wat__
wat__ 我知道啊,可是我不知道我哪里写错了。
一年多之前 回复
wat__
wat__ 我知道啊,可是我不知道我哪里写错了。
一年多之前 回复
Tendency_Yang
Tendency_Yang   2016.04.06 14:58

改善算法性能,缩短运行时间。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!