OJ上题目总是Output Limit Exceeded, 有原题, 有我的代码,求大神赐教。10分
答案:2 悬赏:0 手机版
解决时间 2021-02-22 13:21
- 提问者网友:眉目添风霜
- 2021-02-22 03:32
OJ上题目总是Output Limit Exceeded, 有原题, 有我的代码,求大神赐教。10分
最佳答案
- 五星知识达人网友:未来江山和你
- 2021-02-22 03:51
你的程序问题出在 你把读入的c作为循环变量,导致循环次数与预期不一致,也是导致超时的原因之一
for(c=1; c<=n; c++){
scanf("%lf", &c); //你完全可以换个字母作为标识符
for(i=1; i<=c; i++){ //这一句的标识符c也要改
item=1.0/i;
如果输入的是
2
1
1
你的输出是:
1.00000000
1.00000000
0.50000000
正确输出是:
1.00000000
1.00000000
改了这个以后还有优化的地方:
把所有的结果一次算出来,它要输出哪一项就直接输出
代码如下:
//a[i]表示输入为 i 时 a[i]为结果
const int N=1010;
int t;
int n;
double a[N];
void Predo(){
memset(a,0,sizeof(a)); //a[]全部初始化为0
int i;
for(i=1;i<=1000;i++){
if(i%2==1){ //奇数
a[i]=a[i-1]+1.0/(i*1.0);
}
else{ //偶数
a[i]=a[i-1]-1.0/(i*1.0);
}
}
for(c=1; c<=n; c++){
scanf("%lf", &c); //你完全可以换个字母作为标识符
for(i=1; i<=c; i++){ //这一句的标识符c也要改
item=1.0/i;
如果输入的是
2
1
1
你的输出是:
1.00000000
1.00000000
0.50000000
正确输出是:
1.00000000
1.00000000
改了这个以后还有优化的地方:
把所有的结果一次算出来,它要输出哪一项就直接输出
代码如下:
//a[i]表示输入为 i 时 a[i]为结果
const int N=1010;
int t;
int n;
double a[N];
void Predo(){
memset(a,0,sizeof(a)); //a[]全部初始化为0
int i;
for(i=1;i<=1000;i++){
if(i%2==1){ //奇数
a[i]=a[i-1]+1.0/(i*1.0);
}
else{ //偶数
a[i]=a[i-1]-1.0/(i*1.0);
}
}
全部回答
- 1楼网友:青尢
- 2021-02-22 04:23
既然要一次性输出结果,应该要用数组吧?#include
int main(void){
double item, sum, fl, out[1000];
int i, n, m, c;
scanf("%d", &n);
m=n;
while(n>0){
scanf("%d", &c);
sum=0.0, fl=1.0;
for(i=1; i<=c; i++){
item=1.0/i;
item=item*fl;
fl=-fl;
sum=sum+item;
}
out[n]=sum;
n--;
}
for(;m>0;m--)
printf("%.8f ",out[m]);
return 0;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯