现有十二个小球,其中一个球的重量与其它十一个的重量不相同,但不知道是轻还是重。试用天平称三次,把这个非标准球找出来,并指出它比标准球是轻还是重。
要求:
a).自行定义输入输出形式/格式,用嵌套的选择结构编写程序;
b).调试程序时,必须把十二个球或轻或重共24种可能性都找出来。
这是我学习C语言的实验题,刚开始看到的时候,就已经有思路了,因为这个数学问题以前就已经知道了,我们要做的就是如何把它用程序语言来实现。
首先明确一下,这个题有多种解法,我用了我自己觉得最容易理解和讲解的方法。
先来说一下具体思路:
首先把球编为1-12号并分成三组(1,2,3,4)、(5,6,7,8)、(9,10,11,12)。
第一次称量:(1,2,3,4)vs(5,6,7,8)
有三种结果:1、相等,则说明那个非标准球在(9,10,11,12)中
第二次称量:(1,2,3)VS(9,10,11)
又有三种结果:1、相等,则说明9,10,11号都为标准球,即12号为非标准球。
第三次称量:从1-11号取一个球与12号称量得出轻重。
2、大于,则说明(9,10,11)其中一个为非标准球,且确定为轻球。
第三次称量:(9)vs(10)相等则11为非标准球,否则较轻者为非标准球。
3、小于,则说明(9,10,11)其中一个为非标准球,且确定为重球。
第三次称量:(9)vs(10)相等则11为非标准球,否则较重者为非标准球。
2、大于,即不相等则说明非标准球在(1,2,3,4)和(5,6,7,8)中
第二次称量:(4,5,6)vs(7,8,9)
又有三种结果:1、相等,则说明非标准球在(1,2,3)中,且确定为重球
(因为第一次称量结果为大于)
第三次称量:(1)vs(2)相等则3为非标准球,否则较重者为非标准球。
2、大于,则说明非标准球在(4,7,8)中,
且若是4号则为重球,若是7号或8号则为轻球
因为((1,2,3,4)>(5,6,7,8)且(4,5,6)>(7,8,9))
第三次称量:(7)vs(8)相等则4为非标准球,否则较轻者为非标准球
3,、小于,则说明非标准球在(5,6)中,且确定为轻球
因为((1,2,3,4)>(5,6,7,8)且(4,5,6)<(7,8,9))
第三次称量:(5)vs(6)较轻者为非标准球
3、小于,即不相等则说明非标准球在(1,2,3,4)和(5,6,7,8)中
第二次称量:(4,5,6)vs(7,8,9)
又有三种结果:1、相等,则说明非标准球在(1,2,3)中,且确定为轻球
(因为第一次称量结果为小于)
第三次称量:(1)vs(2)相等则3为非标准球,否则较轻者为非标准球。
2、小于,则说明非标准球在(4,7,8)中,
且若是4号则为轻球,若是7号或8号则为重球,
因为((1,2,3,4)<(5,6,7,8)且(4,5,6)<(7,8,9))
第三次称量:(7)vs(8)相等则4为非标准球,否则较重者为非标准球
3、大于,则说明非标准球在(5,6)中,且确定为重球
因为((1,2,3,4)<(5,6,7,8)且(4,5,6)>(7,8,9))
第三次称量:(5)vs(6)较重者为非标准球
该程序的源代码在下一篇附上。