连续整数和问题
问题描述:大部分的正整数可以表示为2个以上连续整数之和。如6=1+2+3,9=4+5=2+3+4.你的任务是求出给定正整数可以表示为多少个2个以上连续整数之和。
思路:令输入的数为n,i=1,j=i+i,sum=∑(i,j),m=n/2+1;
在3个之中循环。直到不满足条件为止。 条件:i<=j && j<m;
1.若sum<n,说明和不够,则令j加1,sum=sum+j,假如之前有2个数字相加,那么现在变为了3个数字相加。
2.若sum>n,说明和超了,则 让sum=sum-i,假如之前有4个数字相加,那么现在变为了3个数字相加。然后使得i+1
3.若sum=n,说明满足条件,cnt+1. sum=sum-i,i++ 继续寻找满足和。。
View Code
1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 int findResult(int n) 5 { 6 int cnt=0; 7 int m=n/2+1; 8 int i=1; 9 int j=i+1; 10 int sum=i+j; 11 while(i<=j && j<=m) 12 { 13 if(sum==n) 14 { 15 cnt++; 16 sum-=i; 17 i++; 18 } 19 else if(sum<n) 20 { 21 j++; 22 sum+=j; 23 } 24 else if(sum>n) 25 { 26 sum-=i; 27 i++; 28 } 29 } 30 return cnt; 31 } 32 int main() 33 { 34 int n,cnt; 35 while(scanf("%d",&n)!=EOF) 36 { 37 cnt=findResult(n); 38 printf("%d\n",cnt); 39 } 40 return 0; 41 }
Do one thing , and do it well !