为啥我c语言 程序 本地可以 传到oj 就出现了运行错误

m0_63052882 2021-11-28 12:36:46

 #include<stdio.h>
 int main()
 {
 long n,k;
scanf("%ld%ld",&n,&k);
long a[1100];
long long sum;
 for(int i=1;i<=n;i++)
 {
scanf("%ld",&a[i]);
 }
for(int i=1;i<=k;i++)
{
    int l,r;
    l=0;r=0;
scanf("%d%d",&l,&r);
sum=0;
 while(l<=r)
  {
while(a[l]==0)    
{
    l=l+1;
    if(l>r)
break;
}
if(l>r)
break;
sum=sum+a[l];    
l=l+1;    
    }    
printf("%lld\n",sum);        
}
     return 0;
  } 

...全文
254 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
疯狂刷题中 2021-11-28
  • 打赏
  • 举报
回复

同学,我修改了部份代码,你看改成这样是不是更好:

#include <stdio.h>

int main() {
    long n, k;
    scanf("%ld%ld", &n, &k);
    // long a[1100]; // 原式:没有必需啊,重量怎么可能是长整数呢?
    int a[1100];
    // long long sum; // 原式:没有必需啊,重量怎么可能是长整数呢?
    int sum;
    for (int i = 1; i <= n; i++) {
        // scanf("%ld", &a[i]); // 原式
        scanf("%d", &a[i]);
    }
    for (int i = 1; i <= k; i++) {
        int l, r;
        l = 0;
        r = 0;
        scanf("%d%d", &l, &r);
        sum = 0;
//        while (l <= r) { // 直接用for循环不是更好吗
//            while (a[l] == 0) { // 原式:不明白想表达什么意思?
//                l = l + 1;
//                if (l > r)
//                    break;
//            }
//            if (l > r) // 这个退出条件也是多余的
//                break;
//            sum = sum + a[l];
//            l = l + 1;
//        }
        for (; l <= r && r < n; l++) { // 使用for循环,同时也要检测是否越界
            sum += a[l];
        }
        // printf("%lld\n", sum); // 原式
        printf("%d\n", sum);
    }
    return 0;
}

疯狂刷题中 2021-11-28
  • 打赏
  • 举报
回复

同学,这一段想表达什么呢?跟题意没一点关系,如果a很大,它就是个死循环无异?
while(a[l]==0)
{
l=l+1;
if(l>r)
break;
}

m0_63052882 2021-11-28
  • 打赏
  • 举报
回复

数组改成a[11000]也是运行错误

69,751

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧