可分解的正整数
题目描述:定义一种特殊的整数序列,这种序列由连续递增的整数组成,并满足以下条件:
(1)序列长度至少为 3。
(2)序列中的数字是连续递增的整数(即相邻元素之差为 1),可以包括正整数、负整数或 0。
例如,[1,2,3]、[4,5,6,7] 和 [−1,0,1] 是符合条件的序列,而 [1,2](长度不足)和 [1,2,4](不连续)不符合要求。
现给定一组包含 N 个正整数的数据 A1,A2,…,AN。如果某个 Ai能够表示为符合上述条件的连续整数序列中所有元素的和,则称 Ai是可分解的。请你统计这组数据中可分解的正整数的数量。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, cnt = 0, a;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &a);
if (a == 1)
cnt++;
}
printf("%d\n", n - cnt);
return 0;
}形如 {−2,−1,0,1,2} 的和一定为 0。所以只需要在这样的序列后面加一个需要表示的正整数即可,比如要表示的是 3,所求序列是 {−2,−1,0,1,2,3}。那么只有 1 无法被表达出来,所以答案是数组 a 中所有不是 1 的数字的个数。
