德•梅齐里亚克的砝码问题是怎样解决的?
发布网友
发布时间:2024-09-05 07:49
我来回答
共2个回答
热心网友
时间:2024-09-18 14:34
一个商人不慎将一个重40磅的砝码跌落在地面上碎成4块,恰巧每块都是整数磅,后来他又意外发现,可以用这4块碎片做成可以称1到40磅的任意整数磅的重物的新砝码。请你猜一猜,这4块碎片的重量各是多少?
这就是著名的德•梅齐里亚克的砝码问题。这位法国数学家采用“迂回进击”的战术,使问题得到解决。
他是这样演绎的:
首先说明一个结论:如果有一系列砝码,把它们适当地分放在天平的两个托盘上,能称出1到n的所有整数磅重物(这时这些砝码重量的和也一定为n磅)。另设有一块砝码,它的重量为m磅(m=2n+1),那么原来所有的砝码再加砝码m所组成的砝码组便能称出从1到3n+1的所有整数磅的重物。
因为,原砝码组可称出重量1到n的所有整数磅重物。而原砝码组与重量为m磅的砝码可以秤n+1到2n+1磅的所有整数磅重物。
由此可判定这4块砝码的重量:
第一块砝码取m1=1(磅)
第二块砝码取m2=2乘以1+1=3(磅)
第三块砝码取m3=2(1+3)+1=9(磅)
第四块砝码取m4=2(1+3+9)+1=27(磅)
用这4块砝码可秤从1到(1+3+9+27)=40磅间的任何一个整数磅重物。
热心网友
时间:2024-09-18 14:36
Python 3.8.5程序设计方法
思路分析:
因为法码磅数不同,最小的3个数是1,2,3,那最大的数就是34,因而设定范围是1-35。各种组合形式不明确,因而采用枚举算法。
1、由于天平可以两边放置法码,因而法码就有3种情况,放在左边、不放、右边。
设表示砝码位置的参数a,b,c,d,每个值都设定为-1,0,1,-1为左边表示减去值。
2、设定p,q,r三个砝码未知数,那么第四个法码就是(40-p-q-r),假定p不小于q,q不小于r,r不小于40-p-q-r。这样可以有效分割40,缩小范围,也避免重复数据。
3、用循环来判断x==a*p+b*q+c*r+d*(40-p-q-r),并且x是从1到40。
4、最后利用集合去重,如果满足x的值正好是1-40的整数值都有,那就是满足条件了。
5、代码如下。
for p in range(1,35):
for q in range(p,35):
for r in range(q,35):
xx=set()
for a in range(-1,2):
for b in range(-1,2):
for c in range(-1,2):
for d in range(-1,2):
if p<q and q<r and r<40-p-q-r:
for x in range(1,41):
if x==a*p+b*q+c*r+d*(40-p-q-r):
xx.add(x)
if len(xx)==40:
print(p,q,r,40-p-q-r)