zoukankan      html  css  js  c++  java
  • 和为s的连续正数序列

    输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数).例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续的序列的1~5,4~6,和7~8.
       我们可以考虑用两个数small和big分别表示序列的最小值和最大值.首先把small初始化为1,big也初始化为2.如果从small到big的序列的和大于s,我们可以从序列中去掉较小的值,也就是增大small的值。如果从small到big的序列的和小于s,我们可以增大big,让这个序列包含更多的数字。因为这个序列至少要有两个数字,我们一直增加small到(1+s)/2为止。
    参考代码:
     1  void FindCoutinuousSequence(int sum)
     2 {
     3  if(sum<3)
     4  return;
     5  int small=1;
     6  int big=2;
     7  int middle=(1+sum)/2;
     8  int curSum=small+big;
     9  while(small<middle)
    10  {
    11   if(curSum==sum)
    12   PrintContinuousSequence(small,big);
    13  
    14   while(curSum>sum&&small<middle)
    15   {
    16    curSum -=small;
    17    small++;
    18  
    19   if(curSum==sum)
    20   PrintContinuousSequence(small,big);
    21   }
    22   big++;
    23  curSum +=big;
    24  }
    25 }
    26  
    27 void PrintContinusSequence(int small,int big)
    28 {
    29  for(int i=small;i<=big;++i)
    30   printf("%d",i);
    31  printf("
    ");
    32 }
    33  
     
  • 相关阅读:
    react 样式继承 属性传递
    react css-in-js
    react 利用高阶组件给页面加上动画
    react路由过渡动画效果
    REACT列表过度
    react 过渡动画组件
    VueJs之计算属性
    VueJs之判断与循环
    VusJs之入门
    MYSQL之数据报表
  • 原文地址:https://www.cnblogs.com/wxdjss/p/5565209.html
Copyright © 2011-2022 走看看