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

小明和求和(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 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀