永发信息网

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);
        }
 }
全部回答
  • 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;
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯