首页 新闻 会员 周边 捐助

一道面试题:大于1的正整数,可由若干正整数组成。求多少种方式

0
悬赏园豆:50 [已解决问题] 解决于 2013-12-19 16:32

一道面试题(.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

程序解答。

Vinton.Liu的主页 Vinton.Liu | 初学一级 | 园豆:187
提问于:2013-12-18 15:41
< >
分享
最佳答案
1
收获园豆:30
bitbug | 菜鸟二级 |园豆:470 | 2013-12-18 17:22
其他回答(2)
0

考虑了一分钟,假设你不是要面试百度、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

一个重要的假设是第一个盒子数字不小于第二个盒,第二盒子数字不小于第三个盒子。这样出来的方式不会重复。

而且可以减少循环的次数。

大概的算法就是这样。你自己上机试试,后面的应该不会太难。

收获园豆:20
爱编程的大叔 | 园豆:30844 (高人七级) | 2013-12-18 17:31
0

如果楼主要答案,只能给一个建议:

如果一个开发人员对算法厌倦,那么他没救了

[秦时明月] | 园豆:738 (小虾三级) | 2013-12-19 13:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册