连续整数和问题

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

 

 

 

 

posted @ 2013-02-04 16:44  ZeroCode_1337  阅读(421)  评论(0编辑  收藏  举报