2024华为OD机试真题目录-(B卷C卷D卷)-【C++ Java Python】
题目描述
给定一个含有 N 个正整数的数组,
求出有多少个连续区间(包括单个正整数),
它们的和大于等于 x 。
输入描述
第一行两个整数 N x (0 < N <= 100000 ,0 <= x <= 10000000)
第二行有 N 个正整数(每个正整数小于等于 100 )。
输出描述
输出一个整数,表示所求的个数。
示例一
输入
3 7
3 4 7
输出
4
说明
3+4 4+7 3+4+7 7 这四组数据都是大于等于 7 的,所以答案为 4
示例二
输入
10 10000000
1 2 3 4 5 6 7 8 9 10
输出
0
考点
逻辑思维
解题思路
遍历数组寻找满足条件的区间:
使用两层循环遍历数组。外层循环以数组中的每个元素作为可能的连续子数组的起始点(索引 i)。内层循环计算从当前起始点 i 到后续任意一个位置 j 的连续子数组的和(用变量 sum 存储)。
判断并累加满足条件的区间数:
在内层循环中,每当子数组的和 sum 大于等于给定的目标值 x 时,说明找到了一个符合条件的连续子数组。
此时,我们将满足条件的连续子数组个数(从i到j,从i到j+1,从i到j+2,……,从i到n-1,这些区间都满足,即:(n-1 )- j+1个区间)累加到结果变量 res 中。
找到一个满足条件的子数组后,跳出内层循环,继续检查下一个可能的起始点。
代码
c++
#include <bits/stdc++.h>
using namespace std;
int main() {
int x,N;
cin>>N>>x;
int sum=0;
vector<int> vec(N);
for(int i=0;i<N;i++) {
cin>>vec[i];
sum+=vec[i];
}
if(sum<x) {
cout<<0<<endl;
system("pause");
return 0;
}
int res=0;
for(int i=0;i<N;i++) {
int s=0;
for(int j=i;j<N;j++) {
s+=vec[j];
区间和挑战
订阅专栏 解锁全文
3910

被折叠的 条评论
为什么被折叠?



