您的位置:首页 > 理论基础

砝码分盐问题——从数学和计算机的角度分析(9)

2011-06-21 22:28 381 查看
本博客(http://blog.csdn.net/livelylittlefish


)贴出作者(阿波)相关研究、学习内容所做的笔记,欢迎广大朋友指正!





Content
0.
问题



1.
一些方法



2.
从数学的角度分析


3.
能否编程计算?


4.
一个改进的方法


5.
再改进的方法


6.
能否直接计算求出所有正确解?


7.
一个更为简单的方法


8.
所有代码的自动编译、运行


9.
问题扩展


10.
体会


11.
总结


Reference

附录
1
:数学分解的代码

weight1.c

附录
2
:数学分解程序

weight1
的运行结果



附录
3
:树结构分解的代码

weight2.c

附录
4
:再改进的方法的代码

weight3.1.c/3.2.c/3.3.c

附录
5
:再改进的方法的代码

weight3.1.c/3.2.c/3.3.c
的输出结果

附录
6
:直接计算正确分解的代码

weight4.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节
的内容,因此,砝码的组合将出现混合的情况,但本文的思路仍然可以借鉴,有兴趣的读者可自行编程计算。



上一节
下一节





思维题目
, 树型结构
, 砝码分盐
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: