Posted by & filed under 每日一题.

【四脚猫】每日一题(2015年03月11日): 实现一个函数 IsSum 判断一个数是不是连续自然数的和(要求从1开始的连续自然数) ,如果是返回true 否则返回 false。
例如:

1
2
3
isSum(3) =true   // 3=1+2
isSum(10) = true // 10 = 1 + 2 + 3 + 4,
isSum(4) = false

asun提供的解法:

1
2
3
4
5
6
7
8
9
10
11
12
function isSum($num){
$return = false;
for ($i=1;$num>0;$i++){
$num -=$i;
if ($num == 0){
$return = true;
break;
}
}
return $return;
}
var_dump(isSum(5050));

zzctmac提供的解法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
利用(比如num=5050)(1+n)*n/2=5050 公式,如果数满足要求,那么一定有一个相应的n,通过代码计算是否存在n即可知道数满不满足要求
*/

function isSum($num){
 $num *= 2;
 for($i = 1; $i < sqrt($num); $i++) {
   $test_num = $i * $i + $i;
   if($test_num < $num) {
   continue;
  }
  elseif($test_num == $num) {
    return true;
  }  else {
   return false;
  }
 }
}

欢迎各位攻城狮,各位大牛给每日一题投稿,大家可以把自己碰到的有趣问题,工作中碰到的难题等…发送到 稿件邮箱:2313427189@qq.com