Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1523784
  • 博文数量: 164
  • 博客积分: 2993
  • 博客等级: 少校
  • 技术积分: 1718
  • 用 户 组: 普通用户
  • 注册时间: 2011-06-24 11:42
文章分类

全部博文(164)

文章存档

2014年(1)

2013年(36)

2012年(90)

2011年(37)

分类: Python/Ruby

2012-07-17 13:37:10

点击(此处)折叠或打开

  1. <?php


  2. /**
  3.  * 自然数序列,找出任意连续之和等于n的所有子序列
  4.  * 思路:我们用两个数small和big分别表示序列的最小值和最大值。
  5.  * 首先把small初始化为1,big初始化为2,如果从small到big的序列
  6.  * 的和大于n的话,我们向右移动small,相当于从序列中去掉较小的
  7.  * 数字。如果从small到big的序列的和小于n的话,我们向右移动big,
  8.  * 相当于向序列中添加big的下一个数字,一直到small等于(1+n)/2,
  9.  * 因为序列中至少要有两个数字。
  10.  */
  11. function getSquence($n){
  12.     $low=1;
  13.     $high=2;
  14.     $mid=($n+1)/2;
  15.     $sum=$low+$high;
  16.     while($low<$mid){
  17.         if($sum==$n){
  18.             echo $low.'-'.$high.' ';
  19.             $sum-=$low;
  20.             $low++;
  21.         }else if($sum>$n){
  22.             $sum-=$low;
  23.             $low++;
  24.         }else{
  25.             $high++;
  26.             $sum+=$high;
  27.         }
  28.     }
  29. }

  30. getSquence(15);
  31. ?>

阅读(4508) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~