一道面试题(.net开发),大于1的正整数,可由若干正整数组成。求多少种方式。
如:
3=2+1 ,3=1+1+1
4=3+1 ,4=2+2 ,4=2+1+1 ,4=1+1+1+1
5=4+1 ,5=2+2+1 ,5=2+1+1+1,5=1+1+1+1+1,
5=3+2 ,5=3+1+1
程序解答。
考虑了一分钟,假设你不是要面试百度、GOOGLE,对算法的性能要求不高的话,方法如下:
1、对于任意数字N,要计算有几种方式
2、我们将这个问题分解成,计算2个数字相加有几种,3个数字相加有几种,一直到N个数字相加有几种。
3、现在问题变成对于数字N,计算K个数字相加的方式。
4、准备K个盒子(你可以用ARRAY、LIST或是随便啥东东来模拟盒子,这个我不管)
5、第一个盒子,For I=N+1-K TO ROUNDUP(N/K,0) (不需要循环到到1),我们假设第一个盒子数字永远最大,这样出来的方式不会重复。
6、第二个盒子,For J=1 TO N+1-I
一个重要的假设是第一个盒子数字不小于第二个盒,第二盒子数字不小于第三个盒子。这样出来的方式不会重复。
而且可以减少循环的次数。
大概的算法就是这样。你自己上机试试,后面的应该不会太难。
如果楼主要答案,只能给一个建议:
如果一个开发人员对算法厌倦,那么他没救了