输入:35
输出: 2,3,4,5,6,7,8
5,6,7,8,9
17,18
以上都是连续的整数,也许大家第一想到的是穷举法,呵呵 ,大家可以先试试
下面给出自己的算法
- #include <stdio.h>
- int main(void)
- {
- int n, nSum=1;// nSum 保存总和
- scanf("%d", &n);// 输入要分解的n
- for(int n1=1, n2=n1; n1<=n/2; )// n1为最开头的数,n2是最末尾
- {
- if(nSum<n) //总和偏小
- {
- n2++; //末尾加数
- nSum+=n2;
- }
- else if(nSum>n) //总和偏大
- {
- nSum -= n1; //开头删数
- n1++;
- }
- else //if(nSum==n) //相等就输出结果
- {
- for(int t=n1; t<=n2; t++)
- {
- printf("%d,", t);
- }
- printf("/n");
- n2++; //末尾加数,如果不加就会死循环
- nSum+=n2; //这步要小心
- }
- }
- return 0;
- }
原文链接: http://blog.csdn.net/crazyjixiang/article/details/6464438