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

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

 

上一节 下一节

 

思维题目 , 树型结构 , 砝码分盐

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值