把整数分解为连续整数之和(难度:normal 注意优化)


输入:35
输出: 2,3,4,5,6,7,8
5,6,7,8,9
17,18

以上都是连续的整数,也许大家第一想到的是穷举法,呵呵 ,大家可以先试试

下面给出自己的算法

Code:
  1. #include<stdio.h>
  2. intmain(void)
  3. {
  4. intn,nSum=1;//nSum保存总和
  5. scanf("%d",&n);//输入要分解的n
  6. for(intn1=1,n2=n1;n1<=n/2;)//n1为最开头的数,n2是最末尾
  7. {
  8. if(nSum<n)//总和偏小
  9. {
  10. n2++;//末尾加数
  11. nSum+=n2;
  12. }
  13. elseif(nSum>n)//总和偏大
  14. {
  15. nSum-=n1;//开头删数
  16. n1++;
  17. }
  18. else//if(nSum==n)//相等就输出结果
  19. {
  20. for(intt=n1;t<=n2;t++)
  21. {
  22. printf("%d,",t);
  23. }
  24. printf("/n");
  25. n2++;//末尾加数,如果不加就会死循环
  26. nSum+=n2;//这步要小心
  27. }
  28. }
  29. return0;
  30. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值