本博客(http://blog.csdn.net/livelylittlefish )贴出作者(阿波)相关研究、学习内容所做的笔记,欢迎广大朋友指正!
Content
附录 4 :再改进的方法的代码 weight3.1.c/3.2.c/3.3.c
附录 5 :再改进的方法的代码 weight3.1.c/3.2.c/3.3.c 的输出结果
附录 7 :一个更简单的方法的代码 weight5.1.c/5.2.c/5.3.c
9. 问题扩展
面对这样的问题,能否举一反三?能否将其扩展?又如何扩展呢?笔者提供几个思路对其扩展,解决办法,读者可自行编程计算。
(1) 将题目给定的盐的质量及砝码质量 等倍数 增加或减少,达到同样的目标
这个扩展应该是最简单的一种,很好解,只需在程序中将定义的宏,如 total , heap1 和 heap2 进行相应的修改即可。
(2) 将题目给定的盐的质量及砝码质量 不等倍数 增加或减少,问有无解?若有解,有几个解?如何得到这些解?
这个扩展稍微复杂一些,质量不等倍数增加或者减少,首先是砝码组合会发生变化,但还可以参考本文给出的各种方法进行编程计算,修改全局数组 ws[] 的内容及相应的称量过程,应该也能解决该问题。
(3) 砝码个数及其质量都发生变化,达到类似的目标,如何解?
砝码组合会发生巨大的变化,求出砝码的组合结果,即本文全局变量 ws[] 数组的内容应该是该扩展的重点,可以考虑数学上的组合问题,也可以参考本文 2.1 砝码组合状态 的方法,通过一个二进制数表示砝码组合情况,共 n( 砝码个数 ) 位,其每一位 (0 或者 1) 表示砝码出现或者不出现;但该表示方法不能表示砝码出现在天平的哪一端。为了表示砝码出现在天平的哪一端,可以用一个三进制数表示砝码的组合情况,其每一位 0,1,2( 此 2 表示 -1 ,同 2.1 节 ) 分别表示不出现,出现在左盘,出现在右盘。该方法也可参考 砝码称重问题 。
这个扩展的编程有些复杂。关于如何生成数的组合或者排列,可参考笔者的另一文章,或者相关资料。
(4) 更改称量次数,仍然达到类似的目标,又如何解?如果同时砝码个数及其质量也发生了变化,又该如何解?
若再加入 1 次或多次的称量过程,若砝码个数变化不大,还可控,若砝码个数及其质量如 (3) 也发生变化,则该扩展会变得非常复杂,编程也会很复杂。但解决思路应该还是这些思路,如果前 3 个扩展都能解决,该扩展也能很好的解决,有兴趣的读者可自行编程计算。
(5) 若将每个过程分解出来的盐也当作砝码?又该如何解?
这个扩展就不再本文的范围内了,本文定位于有确定解的数学和计算机分析。实际上,该确定的解就是通过仅仅是已知砝码组合状态分解问题的解,我们在第2节 和第7节 均有讨论。
那么这个扩展就类似本文第1.1节 和第1.3节 的内容,因此,砝码的组合将出现混合的情况,但本文的思路仍然可以借鉴,有兴趣的读者可自行编程计算。