Category Archives: 随笔

一道面试题

今天在校招的时候看到一个系统组的笔试题还挺有意思的。

题目是:
要求在1-100之间选择五个不同的数,要求五个数的和加起来不能大于100,问有多少种可能,要求过程,不求结果。

我回来想了一下,大体思路是分别求加起来分别为1到99之间的每一个可能的数目,而且最小集合是{1,2,3,4,5},所以只需要计算10-99这89种可能的组合就行,循环实现代码如下:

<?php
for($i=10; $i<100; $i++) {
    $total += get_possible($i);
}
var_dump($total);

function get_possible($num)
{
    $total=0;
    for($key1=1;$key1<$num-10;$key1++) {
        for($key2=$key1+1;$key2<=$num-$key1;$key2++) {
            for($key3=$key2+1;$key3<=$num-$key2-$key1;$key3++) {
                for ($key4=$key3+1;$key4<=$num-$key1-$key2-$key3;$key4++)
                {
                    for ($key5=$key4+1;$key5<=$num-$key1-$key2-$key3-$key4;$key5++) {
                       
                        if($key1+$key2+$key3+$key4+$key5 == $num) {
                            $total++;
                        }
                    }
                }
            }
        }
    }
    return $total;
}

结果:int(455175)

没发现一个学生写出代码有点失望,如果有更好的方法欢迎交流。