将一个给定的正整数拆分成若干个连续的正整数之和,对于给定的正整数n,求出所有符合这种拆分要求的连续正整数序列的方案个数。
例如输入n=15,输出3
15 = 1 + 2 +3 +4 +5
15 = 4 + 5 + 6
15 = 7 +8
例如输入n=16,无解,输出0
思路
本题直接暴力枚举即可,开两重循环,外层循环从最小正整数1开始枚举,里层循环枚举序列长度。用等差求和公式即可判读符不符合题意。
#include<iostream>
using namespace std;
const int N = 1e5+10;
int n;
int count;
int main()
{
cin>>n;
for(int i = 1; i <= n/2+1; i++) //枚举所有序列起点
{
for(int j = 1; ;j++) //枚举序列长度
{
int sum = (2*i+j-1)*j/2;//等差数列求和
if(sum==n) //输出可拆解的序列
{
count++;
break;
}
else if(sum > n)
break;
}
}
printf("%d",count);
return 0;
}