MT【142】Bachet 问题,进位制

问题:
满足下面两种限制条件下要想称出40以内的任何整数重量,最少要几个砝码:
i)如果砝码只能在天平的某一边;
ii)如果砝码可以放在天平的两边.

提示:对于 i)先证明如下事实:
\[\textbf{砝码 $1,2,4,\cdots,2^{n-1}$ 可以称出 $2^n-1$ 以内的任何整数质量,且没有其他的仅由 $n$ 个砝码组成的集合具有同样的称重效果(能称出同样多的一列从 $1$ 开始的连续重量)}\]

分析:
因为 \(1\) 到 \(2^n-1\) 的任何正整数无一例外的可以用唯一的表示方式表示成一个 \(n\) 位二进制数,表示成和式为\(\sum\limits_{0}^{n-1}{a_s2^s}\), 其中 \(a_s\in\{0,1\}\). 从而这样的砝码就可以满足我们的目标,且"没有浪费"(没有两种砝码的组合会产生相同的效果).既然没有浪费,故没有另外的选择的砝码能称更长的一列重量.
为了称重量为 \(1\) 的质量,有一个砝码必须是 \(1\) ;为称重量为 \(2\) 的质量,有一个砝码必须为 \(2\); 为称重量为 \(4\) 的质量,有一个砝码必须为 \(4\); 依此类推, \(1,2,4,\cdots,2^{n-1}\) 是能实现我们目标的唯一的一组砝码.

回到此题,
40不是形如\(2^n-1\)的数,由上述分析 可知道,砝码 \(1,2,4,8,16,32\) 可以称出 63 以下的任何质量,而没有五个砝码可以称出超过\(31\)的质量.但值得注意的是对于 40 而言,解答不唯一.砝码 1,2,4,8,9,16 也能称出 40 以内的任何质量.

对于ii)可以参考北大的自主招生题MT【38】

原文地址:https://www.cnblogs.com/mathstudy/p/8822558.html

时间: 2024-11-14 13:31:36

MT【142】Bachet 问题,进位制的相关文章

ACM 求全排列(字典序、邻位对换、递增进位制数,递减进位制数)

字典序:(联合康托展开就也可以按照中介数求) 邻位对换.递增进位制数,递减进位制数:具体的实现和算法讲解如下: 代码..C++版的实现并不好..因为是挨个向后找的,如果K很大的时候会超时,不过...思路是这样...,第二版C++没有完成...因为不想写了,思路很简单,一次加减K就可以了 python代码直接给出,很完美 1 #include<cstdio> 2 #include<cstring> 3 #include<vector> 4 #include<algo

Codevs 2898 卢斯的进位制

时间限制: 1 s 空间限制: 32000 KB 题目等级 : 青铜 Bronze 题解 题目描述 Description 著名科学家卢斯为了检查学生对进位制的理解,他给出了如下的一张加法表,表中的字母代表数字. 例如下图: 其含义为: L+L=L,L+K=K,L+V=V,L+E=E K+L=K,K+K=V,K+V=E,K+E=KL         …… E+E=KV + L K V E L L K V E K K V E KL V V E KL KK E E KL KK KV 根据这些规则可推

谈谈计算机和网络常用进位制:二进制(Binary)、十进制(Decimal)和十六进制(He

谈谈计算机和网络常用进位制:二进制(Binary).十进制(Decimal)和十六进制(Hexadecimal) 二进制.十进制和十六进制,这几个个进制里算十进制我们最熟悉了,从学前教育或者幼儿园最先接触的数学到再我们日常生活几乎天天和他打交道的下面这十个数字. 但是,话又说回来,你真的理解这10个数字吗?或者说你理解十进制吗? 今天我们就以十进制为切入点顺便谈谈二进制.十六进制以及它们之间的转换.在谈这些进制之前我们先了解一下进制的概念: 所谓进制就是进位制,是人们规定的一种进位方法.进位制/

各种进位制转换

在数字后面加上不同的字母来表示不同的进位制.B(Binary)表示二进制,O(Octal)表示八进制,D(Decimal)或不加表示十进制,H(Hexadecimal)表示十六进制. 例如:(101011)B=(53)O=(43)D=(2B)H 二进制 → 十进制 方法:二进制数从低位到高位(即从右往左)计算,第0位的权值是2的0次方,第1位的权值是2的1次方,第2位的权值是2的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了. 例:将二进制的(101011)B转换为十进制的步骤如下:

进位制 与成熟表示

1:移位运算符 #include<stdio.h> int main() { printf("%d ",18>>1); // 移位运算符 也就是 乘以2^? 后面的 是 进位 的 位数. printf("%d ",18<<1); // 除以2^? 后面的 是 退位 的 位数 }

计算机进位制原理

生活中的数字都以10进制为准 1)假定二进制.八进制.十六进制    ----->    十进制     (即  乘加 计算) 2)假定十进制    ----->   二进制.八进制.十六进制     (即  相除取余 ) https://wenku.baidu.com/view/34ba748be87101f69f319589.html 百度文库,详细解析

高精度进位制转换,Poj(1220)

转自ACdream. #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXSIZE 60000 char in[MAXSIZE]; int oldbase,newbase; int a[MAXSIZE],b[MAXSIZE],r[MAXSIZE]; int getNum(char c) { if(c >= '0' && c <= '9') return c

【xsy1529】小Q与进位制 - 分治FFT

题意很简单,就是求这个数... 其实场上我想出了分治fft的正解...然而不会打...然后打了个暴力fft挂了... 没啥好讲的,这题很恶心,卡常卡精度还爆int,要各种优化,有些dalao写的很复杂我都没看懂...我写的是每三位拆分然后再合并 代码: 1 //强烈谴责卡常数而需要大量优化 2 //upd:还卡精度... 3 #include<algorithm> 4 #include<iostream> 5 #include<cstring> 6 #include&l

进制转换与原码补码

进制也就是进位制,是人们规定的一种进位方法. 我们先来回想一下生活中的十进制: (1) 数码: 指集合论中刻画任意集合所含元素数量多少的一个概念 十进制的基本符号是:0.1.2.3.4.5.6.7.8.9:我们把这些称为十进制的数码:也就是基本符号,所有的十进制都是有这十个数码组成的.每位在加时都是"逢十进一". (2) 位权: 数制中每一固定位置对应的单位值称为位权 那么大家考虑一个问题,说一个十进制数,已知第四位是5,其它位都是0,那么这个数是几?答案:5000,怎么算的是5*10