C语言名题精选百则之整数的所有不同分割数目非递归解
文章目錄
所谓的整数的分割(Partition of an Integer), 指的就是把一个正整数写成若干个正整数的和,但这里只计较有多少种分割方式,而不计较它的内容。例如,4=3+1,2+2,2+1+1,1+1+1+1+1, 再加上自己,就一共有5种分割方式。编写一个程序,输入一个正整数,输出它有多少种分割方式。
说明: 以下是几点重要的提示
- 要把n进行分割,其实不完全只针对n, 还要看分割中最大的值是什么。例如,要把10进行分割,若在分割中最大的值是6,即10=6+…, 那么”…”的部分充其量的值是4而已,不仅如此,和还须等于4;因此,如果知道”…”, 即4有多少种分割方式,也正是在分割10时,最大值为6的分割方式!
- 应该分析一下n这个输入值,与在分割中的极大值(如1.中的6)之间有什么联系,找出来,问题就解决了。
在C语言名题精选百则之整数的所有不同分割数目中得到一个递归解,我们可以将它转换成非递归解