2025蓝桥杯省赛c++b组第三题 可分解的正整数
2025蓝桥杯省赛c++b组第三题 可分解的正整数
定义一种特殊的整数序列,这种序列由连续递增的整数组成,并满足以下条件:
序列长度至少为3。
序列中的数字是连续递增的整数(即相邻元素之差为1),可以包括正整数、负整数或0。
例如,[1,2,3]、[4,5,6,7] 和 [−1,0,1] 是符合条件的序列,而 [1,2](长度不足)和[1,2,4](不连续)不符合要求。
现给定一组包含N 个正整数的数据A1,A2,…,AN。如果某个 Ai 能够表示为符合上述条件的连续整数序列中所有元素的和,则称Ai是可分解的。请你统计这组数据中可分解的正整数的数量。
输入格式
共两行。
第一行包含一个正整数 N,表示数据的个数。
第二行包含 N 个正整数 A1,A2,…,AN,表示需要判断是否可分解的正整数序列。
输出格式
输出一行一个整数,表示给定数据中可分解的正整数的数量。
样例输入
3
3 6 15
样例输出
3
数据规模
1≤N≤10^5,1≤Ai≤10^9。
方法思路
-
问题分析:通过数学推导,我们发现只要正整数不等于1,总能找到一种分解方式使其满足条件。因此,只需统计输入中不等于1的数的个数。
-
时间复杂度:由于只需遍历数组一次,时间复杂度为O(N),适用于题目给定的数据规模。
-
空间复杂度:仅需常数空间,空间复杂度为O(1)。
代码
#include <bits/stdc++>
using namespace std;
int main() {
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n;
cin >> n;
int count = 0;
for (int i = 0; i < n; ++i) {
int a;
cin >> a;
if (a != 1) {
++count;
}
}
cout << count << '\n';
return 0;
}
代码解释
-
输入处理:使用ios::sync_with_stdio(0),cin.tie(0),cout.tie(0)加快输入速度。
-
遍历输入:逐个读取每个数,判断其是否等于1。若不为1,则计数器加1。
-
输出结果:最后输出计数器的值,即符合条件的正整数数量。
更多推荐
所有评论(0)