NightStriker 2022-03-19 09:32 采纳率: 60%
浏览 116
已结题

小明和求和(C++,思路+答案)

小明爱上了求和,这天他拿到一个数列和一个数字 CC,现在小明想要知道数列中连续数字和为 CC 的子数列有多少个,小明不会解决这个问题,聪明的你可以帮助小明解决这个问题吗?
输入
第一个输入一个n和c,表示数列的长度和目标值;
第二行输入n个数,表示这个数列。输出
输出一个数,表示和为c的连续子数列有多少个。数据范围
1<=n<=100000
1<=c<=1000000000

#include<bits/stdc++.h>
using namespace std;
int a[100005],w;
int main()
{
int n,c;
cin>>n>>c;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<n;i++)
{
int sum=c;
sum-=a[i];
if(sum<0||sum==0) continue;
for(int j=i+1;j<=n;j++)
{
sum-=a[j];
if(sum==0)
{
w++;
break;
}
if(sum<0) break;

    }
    
} 
cout<<w<<endl;
return 0;

}

1<=数列中元素<=1000000000
输入样例
4 5
1 4 1 4

输出样例
3

样例解释
和为5的连续子数列有
1 4
4 1
1 4

#include<bits/stdc++.h>
using namespace std;
int a[100005],w;
int main()
{
int n,c;
cin>>n>>c;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<n;i++)
{
int sum=c;
sum-=a[i];
if(sum<0||sum==0) continue;
for(int j=i+1;j<=n;j++)
{
sum-=a[j];
if(sum==0)
{
w++;
break;
}
if(sum<0) break;

    }
    
} 
cout<<w<<endl;
return 0;

}
这个代码为什么错了呢?

  • 写回答

3条回答 默认 最新

  • 魔法自动机 2022-03-19 10:04
    关注

    维护一个子区间和,遍历输入的数组,每次遍历到一个数就让它加入到区间和,如果加入后的区间和<c就继续遍历;如果加入后==c那么答案++;如果加入后>c那么就缩小区间和直到<=c然后按照前面方式处理。
    这个连续的区间和,左右指针只会增不会减,相当于滑动窗口。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 3月27日
  • 已采纳回答 3月19日
  • 修改了问题 3月19日
  • 修改了问题 3月19日
  • 展开全部

悬赏问题

  • ¥15 基于单片机数字电压表电路组成及框图
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line