代码改变世界

编程小练习:拆分自然数

2009-06-21 17:54  Jeffrey Zhao  阅读(25343)  评论(55编辑  收藏  举报

上次的小练习的反响很不错,于是今天我们再来做一道小题目。上次有朋友指出,“反转数组”这种题目非常无聊,“写的再好,又会比框架自带的实现好吗?”。其实做这些小题目的作用是锻炼“编程解决问题”的能力,并非是为了替换框架的实现等等。咱们小学初中高中,不都会做数学题目,几何代数的吗?目的都是为了建立基本解题能力。现在的题目也是这样,请不要误会这些习题的目的。今天的题目如下:

给出sum、min、max和n四个正整数,请输出所有将sum拆分为n个正整数之和,其中每个正整数k都满足:min <= k <= max。这n个正整数之间可以重复,不过由于加法交换率的作用,1 + 2和2 + 1便算是重复的拆分了。

例如,sum = 5,n = 3,min = 1,max = 3,这时候满足条件的拆分方式只有两种:

  • 1 + 1 + 3
  • 1 + 2 + 2

这个练习和上次不同,我们假设所有的输入都是正整数。您无需对其进行合法性判断,只要专注于业务实现便是。您在看下面的内容之前,不如自己先简单尝试一下?老赵建议,您可以在这里阐述您的思路。至于代码,您可以在自己的博客上写一篇文章,然后再这里贴上链接,如果直接在这里贴代码的话,会使评论列表变得很长,影响阅读。点此展开