c语言程序,时间超限,怎么解决

c语言程序,时间超限,怎么解决,第1张

将scanf输入换成从文件读取数据,使用fopen, fread, fwrite之类的函数,不要从终端上直接输入。或者使用重定向<从文件读取数据。

如果效率还是不行,再将printf改成输出到文件中。

其一,对于求最大公约数(GCD)常用欧几里得算法,时间复杂度为O(logn)

其二,注意读题,题目问的是N个数的最大公约数,而不是N对数分别的最大公约数,只需对前两个数和第三个数求最大公约数即为三个数的最大公约数,以此类推。

不保证无误的一份代码:

#include <bits/stdc++.h>

using namespace std

int gcd(int a, int b)

{

int r

while(r)

{

r=a%b

a=b

b=r

}

return a

}

int main()

{

int n

cin>>n

int ans,a

cin>>ans

for(int i=1i<ni++)

{

cin>>a

ans=gcd(ans,a)

}

cout<<ans<<endl

return 0

}

n 太大耗时太多,需要改小

去掉 gets()

增加一个 int k用来判断scanf输入成功.

while( (k=scanf("%d", &n))!=EOF) {

if(k==1 &&n>12 &&n<=1300000) {}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12160601.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存