问题描述:大部分的正整数可以表示为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 #include2 #include 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)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 }