Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1418626
  • 博文数量: 842
  • 博客积分: 12411
  • 博客等级: 上将
  • 技术积分: 5772
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-14 14:43
文章分类

全部博文(842)

文章存档

2013年(157)

2012年(685)

分类: C/C++

2012-05-30 13:32:17




题目:输入一个正数n,输出所有和为n的连续正数序列,例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3个连续序列1-5、4-6、7-8。

思 路1:我们用两个数small和big分别表示序列的最小值和最大值。首先把small初始化为1,big初始化为2,如果从small到big的序列的 和大于n的话,我们向右移动small,相当于从序列中去掉较小的数字。如果从small到big的序列的和小于n的话,我们向右移动big,相当于向序 列中添加big的下一个数字,一直到small等于(1+n)/2,因为序列中至少要有两个数字。

 

  1. void FindContinuousSequence(int n)  
  2. {  
  3.     assert(n >= 3);  
  4.   
  5.     int small = 1;   
  6.     int big = 2;  
  7.     int mid = (1+n)/2;  
  8.     int sum = small+big;  
  9.     while(small < mid)  
  10.     {  
  11.         if(sum == n)  
  12.         {  
  13.             cout << small << "-" << big << endl;  
  14.             sum -= small;  
  15.             small++;  
  16.         }  
  17.         else if(sum > n)  
  18.         {  
  19.             sum -= small;  
  20.             small++;  
  21.         }  
  22.         else  
  23.         {  
  24.             big++;  
  25.             sum += big;  
  26.         }  
  27.     }  
  28. }  
阅读(771) | 评论(0) | 转发(0) |
0

上一篇:多进程调试

下一篇:gdb调试技术

给主人留下些什么吧!~~