单点时限: 2.0 sec
内存限制: 256 MB
有些正整数可以表示为 n (n>1) 个连续正整数的和,如:
15=1+2+3+4+5=4+5+6=7+8
给定一个正整数 N,判断其是否可以表示为一组连续正整数的和,输出符合条件的解的组数。
输入格式
第 1 行:一个整数 T (1≤T≤10) 为问题数。
第 2 至 T+1 行,对应每个问题有一行,每行一个正整数 N (3≤N≤106)。
输出格式
对每个测试数据,输出 Case x: y。x 为从 1 开始的测试数据编号,y 为符合条件的解的组数。
样例
input
3
15
16
99
output
Case 1: 3
Case 2: 0
Case 3: 5
提示
Originally EOJ 3025.
/*
思路一:暴力枚举
思路二:找出2*n的公倍数,看两个数是否满足等差数列之和公式
*/
#include<iostream>
using namespace std;
int count(int n) {
int ans=0;
// int m=2*n;
// int flag[n]= {0};
// for(int i =2; i <= (n+1)/2; i++) {
// if(m%i==0) {
// int x=m/i;
// int y=i;
// if(flag[x]==0&&flag[y]==0) {
// if((x+y-1)%2==0)
// ans++;
// }
// flag[x]=1,flag[y]=1;
// }
// }
for(int i = 1; i <= (n+1)/2; i++)
{
int sum=0;
int j = i;
while(sum<n)
{
sum+=j;
j++;
}
if(sum==n)
ans++;
}
return ans;
}
int main() {
int t;
cin>>t;
for(int i =0 ; i < t; i++) {
int n;
cin>>n;
printf("case #%d:\n%d\n",i,count(n));
}
return 0;
}