2.21 只考加法的面试题
看了这么多题目,有人不禁会想,这些题目都太难了!有没有容易的?这里有一题,只用到加法,大家别嫌题目简单,不妨试试看。
我们知道:
1+2=3;
4+5=9;
2+3+4=9;
等式的左边都是两个以上连续的自然数相加,那么是不是所有的整数都可以写成这样的形式呢?稍微考虑一下,我们发现,4、8等数并不能写成这样的形式。
问题1:写一个程序,对于一个64位正整数,输出它所有可能的连续自然数(两个以上)之和的算式③。
问题2:大家在测试上面程序的过程中,肯定会注意到有一些数字不能表达为一系列连续的自然之和,例如32好像就找不到。那么,这样的数字有什么规律呢?能否证明你的结论?
问题3:在64位正整数范围内,子序列数目最多的数是哪一个?这个问题要用程序蛮力搜索,恐怕要运行很长时间,能否用数学知识推导出来?
注释
① 这个规律请读者自己证明(提示N/k,等于1,2,3,…,N中能被k整除的数的个数)。
② ceil(ceiling,天花板之意)表示大于等于一个浮点数的最小整数。
③ 当然,在写这个程序的时候,可以用各种运算,不限于加法。