【发布时间】:2011-02-07 05:32:53
【问题描述】:
我对微软面试中的一个问题感到困惑,如下所示:
一个函数应该接受一个范围(3 - 21),它应该打印所有连续的数字组合以形成每个数字,如下所示:
3 = 1+2 5 = 2+3 6 = 1+2+3 7 = 3+4 9 = 4+5 10 = 1+2+3+4 11 = 5+6 12 = 3+4+5 13 = 6+7 14 = 2+3+4+5 15 = 1+2+3+4+5 17 = 8+9 18 = 5+6+7 19 = 9+10 20 = 2+3+4+5+6 21 = 10+11 21 = 1+2+3+4+5+6你能帮我在 C# 中形成这个序列吗?
谢谢, 马赫什
【问题讨论】:
-
到目前为止你做了什么?您是否考虑过递归解决方案?这是显而易见的第一步。或者,您可以研究连续数字之和的性质,并使用它来制定解决方案模式(例如,x 是 3 个连续整数的总和,当且仅当 x 可被 3 整除)。
-
17=7+8 19=8+9 ???
-
您是希望报告所有这样的组合(例如 9 = 2+3+4,也一样)还是只报告最短的这样的序列?
-
@Jim Lewis:假设 x 是以 a 开头的 3 个连续整数的总和。那么 x = a + (a+1) + (a+2) = 3a + 3 = 3(a+1),所以它可以被 3 整除。反之,如果 x = 3b 那么 x = (b-1) + b + (b+1)。
-
我必须补充一点,解决方案模式方法适用于奇数,但对于偶数来说有点痛苦。对问题进行简单的攻击(如下)更有效。