有一个自然数的集合,其中最小的数量是1,最大的数量是100,这个集合中的数除1外,每个数都可由集合中的某两个数(这两个数可以相同)求和得到。编写程序求符合上述条件的自然数的个数为10的所有组合。(15分)
程序就先不写了, 重要的是解决问题的方法。我想到的方法如下:
咱们把问题反过来看,这10个数中必然是要有 1 和 2 存在的。而第三个数需要从1和2中组合而来,1+1, 1+2, 2+2。所以只有两种可能:3、4。第四个数要从前三个数中组合而来 。。。
也就是说先确定最小的数 1, 2。再根据确定的数合成比已确定的这些数都要大的数。以此类推。 直到找到第10个数为止。
数据结构采用 树 会比较好做。不会写 树 的话,去网上找个现成的。