剑指Offer:和为s的连续正整数序列

女爷i 2022-01-30 12:13 318阅读 0赞

输入一个s,打印出所有和为s的连续正整数序列(至少含有2个数)。例如,输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以打印出3个连续序列1-5,4-6,7-8.

代码: 因为这里并不是从传入的一个数组中进行的查找,而是从连续的正整数序列。

  1. void FindContion(int sum){
  2. if( sum<3){
  3. return;}
  4. int small = 1;
  5. int middle = (1+sum)/2;
  6. int curSum = small+big;
  7. while(small < middle) // 1
  8. {
  9. if(curSum == sum)
  10. PrintCon(small,big);
  11. while(curSum > sum && small < middle)
  12. {
  13. curSum -= small;
  14. small ++ ;
  15. if(curSum == sum)
  16. PrintCon(small,big);
  17. }
  18. big++;
  19. curSum += big;
  20. }
  21. }
  22. PrintCon(int small,int big){
  23. for(int i=small;i<=big;i++)
  24. printf("%d",i);
  25. printf("\n");
  26. }

eg:这里有一个小技巧。即在1位置的while循环之后,立即判断是否满足,并且在之后,再在求完已知和的基础上再求下一次操作后的和再来判断是否满足。

发表评论

表情:
评论列表 (有 0 条评论,318人围观)

还没有评论,来说两句吧...

相关阅读