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

被折叠的 条评论
为什么被折叠?



