表妹问了个八层for嵌套的题

今天表妹问了我一个题,题目如下:

一个人有一个40磅的砝码,跌落成4块.每块重量都是整数,用这四块可以称从1到40磅之间的任意整数磅的重物.
问这四块砝码各自的重量是多少?

先看一下她老师给的代码(捂脸笑哭):
在这里插入图片描述
如果真的按照这个方法解出来四个砝码的重量(答案是1,3,9,27)
大概需要计算 333340279*3 = 2361960次,确实理论上可以算出来,但是我赌一块巧克力我的电脑半个小时跑不出来这代码。

那么秉承着数学至上的原理,到底该怎么解这个题呢?
我想到了之前著名的《小鼠喝毒药》问题,好,我们先来看看《小鼠喝毒药问题》

题目如下:

现有8瓶药,其中有一瓶是毒药,请用最少的老鼠测出来哪瓶是毒药。

如果你觉得是八只老鼠,那么我下面将告诉你最少使用3只老鼠测出来毒药的方法:

假设七个瓶子我们编号为0,1,2,3,4,5,6,7
三只老鼠我们编号为:A,B,C

接下来我们采取如下方式喂药(✔表示喝这个瓶子的药,×表示不喝这个瓶子的药):

01234567
A××××
B××××
C××××

接下来等待结果就好了
如果:
ABC全死,毒药是7
AB死,C活,毒药是6
A死,B活,C死,毒药是5
A死,B活,C活,毒药是4
A活,B死,C死,毒药是3
A活,B死,C活,毒药是2
A活,B活,C死,毒药是1
A活,B活,C活,毒药是0

至此,判断完毕。如果有眼力劲儿好的同学会发现,这不就是使用了二进制嘛。
原理就是利用三只老鼠构成二进制的三个位数来表示0~7的数字(例如000代表0,001代表1……111代表7)

回到表妹的题目,四个砝码,可以表示从0~40的任意数字
二进制,四位的话最多表示15(8+4+2+1)
显然不够,那么三进制呢?(1111)3表示的数字为:
27+9+3+1 = 40

奇迹出现了,27、9、3、1,刚好加起来等于摔碎之前的重量
接下来让我们先来看卡这四个砝码(27,9,3,1)能不能称0~40的任意重量
假如称33,将27和9放左盘,3放右盘,差值刚好就是(27+9-3)=33了
其他的重量也可以这样去尝试。

那么原理呢?为什么能如此神奇?
神奇的地方在于,三进制的数字,上一位减去下一位等于下一位的两倍,也就是说:
(100)3 – (10)3 = (20)3

那比如33的三进制是(1020)3,那我们单看这个,可能会说我们需要2个重量为3的砝码,利用上面的粗体公式,我们可以可以发现,将重量为9的砝码放在左盘,重量为4(3+1)的砝码放在右盘,就会得到我们想要的为6的重量差了

至此,不用八层for循环嵌套,通过笔和草稿纸得出答案。

如果各位jio的小编写的还阔以的话,点个赞再走吧~感谢感谢!
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值