【算法题】用最少的砝码称出1到100克的物品

题目描述:

给定一个天平,用最少的砝码称出1到100克的物品,砝码重量任选

假设物品放在右边,砝码可以放在左边或者右边,那么有:放在左边砝码的重量 = 放在右边砝码的重量 + 物品的重量,即
放在左边砝码的重量 - 放在右边砝码的重量 = 物品的重量。

假设砝码放在左边用‘+’表示,放在右边用‘-’表示。那么容易知道∑±ai(ai取‘+’、‘-’或不取,三种情况)表示所有可能的情况。

给出一种方案:1、3、9、27、81(想想为什么底数取3???)

容易知道4个砝码∑±ai最多有34 =
81中可能的值,所以4个砝码不可能称出1到100所有的值。下面说明1、3、9、27、81的正确性。

对于30、31、32...3n,能够称出1到(3n+1 -
1)/ 2之间的任何一个值。

证明(数学归纳法):

n = 0 时能称出值 1、2。

假设 n = k -
1时成立,即对于30、31、32...3k-1,能够称出1到(3k -
1)/ 2之间的任何一个值。

当n =
k时,由于30、31、32...3k-1,能够称出1到(3k -
1)/ 2之间的任何一个值,所以将每个砝码在天平中的位置对换会得到-1到-(3k - 1)/
2,同时将3k放在左边得到(3k -
1)/ 2 + 1到3k -
1,又由于30、31、32...3k-1,能够称出1到(3k -
1)/ 2之间的任何一个值,所以将3k放在左边会得到3k + 1到3k +
(3k - 1)/ 2 = (3k+1 - 1)/
2

故当n =
k时成立。

得证。

容易证明,除了1、3、9、27、81,1、3、9、27、60...80也都是可行的解

【算法题】用最少的砝码称出1到100克的物品,布布扣,bubuko.com

时间: 2024-12-20 11:14:25

【算法题】用最少的砝码称出1到100克的物品的相关文章

笔试算法题(24):找出出现次数超过一半的元素 & 二叉树最近公共父节点

出题:数组中有一个数字出现的次数超过了数组长度的一半,请找出这个数字: 分析: 解法1:首先对数组进行排序,时间复杂度为O(NlogN),由于有一个数字出现次数超过了数组的一半,所以如果二分数组的话,划分元素肯定就是这个数字: 解法2:首先创建1/2数组大小的Hash Table(哈希表可以替代排序时间,由于一个数字出现超过了数组的一半,所以不同元素个数肯定不大于数组的一半),空间复杂度O(N),顺序扫描映射数 组元素到Hash Table中并计数,最后顺序扫描Hash Table,计数超过数组

砝码称重问题,因式分解有妙用

如果天平两端都允许放砝码,并且假定所有的砝码都是整数克.为了称出从 1 克到 40 克 所有整数克 的物品,最少需要几个砝码? 感兴趣的读者不妨自己先试着想想,再往下看. 秘密在于 3 的幂 说起来这个问题历史还算是挺悠久的.据<数学游戏与欣赏>( [英] 劳斯·鲍尔 [加] 考克斯特 著,杨应辰等 译),这个问题被称作巴协 (Bachet) 砝码问题:而据<数学聊斋>(王树禾著),该问题至少可追溯到 17 世纪法国梅齐里亚克 (Meziriac, 1624) .他们给出的答案是:

砝码称重2

参考 https://blog.csdn.net/livelylittlefish/article/details/3854702 https://www.guokr.com/article/3742 http://yetanothermathprogrammingconsultant.blogspot.com/2016/03/the-weight-problem-of-bachet-de-meziriac.html http://www2.washjeff.edu/users/mwolterm

J - 砝码称重 改自51nod1449

J - 砝码称重 Time Limit: 2000/1000 MS (Java/Others)      Memory Limit: 128000/64000 KB (Java/Others) Submit Status Problem Description 有一个物品和一些已知质量的砝码和天平,问能不能用这些砝码称出这个物品的重量(天平两边都可以放砝码) Input 多样例输入,样例数<=20000 对于每个样例: 第一行输入两个数n,m,表示砝码数量和重物质量,1 ≤ m ≤ 1018 第

砝码称重3

参考 https://blog.csdn.net/livelylittlefish/article/details/6555347 假设有280g盐,有一架天平,有两个砝码,分别是4g和14g .能否在3次内将280g食盐分为100g和180g两堆,请详细描述你的解决方法. 这是另外一种砝码称重问题,类似,但是又不同.砝码称重这个是给定无限数量砝码,只需计算能不能组成一个重量,不用知道如何组合.砝码称重1是给定砝码个数和重量,以及可以组合的重量,求出任意一种重量是如何组合的.砝码称重2给定重量和

蓝桥杯——说好的进阶之砝码称重(贪心算法)

5个砝码 用天平称重时,我们希望用尽可能少的砝码组合称出尽可能多的重量. 如果只有5个砝码,重量分别是1,3,9,27,81.则它们可以组合称出1到121之间任意整数重量(砝码允许放在左右两个盘中). 本题目要求编程实现:对用户给定的重量,给出砝码组合方案. 例如: 用户输入: 5 程序输出: 9-3-1 用户输入: 19 程序输出: 27-9+1 要求程序输出的组合总是大数在前小数在后. 可以假设用户的输入的数字符合范围1~121. public static void main(String

如何出一道ACM算法题?

本文背景 本人算法能力一般,但是为省赛和区域赛网络赛出过几道题,总结了一些自己的经验,希望与大家分享.本文不涉及具体的算法题,都是一些理论性的想法和一些建议. 题源 如果你能在没有题源的情况下自己想出一道新的题目,想必也很难看到这篇文章了.题源是出题的第一步,相信到了需要出题的地步,正在看这篇博客的你一定有自己熟悉的刷题网站,而这个网站可以作为你的题源,因为熟悉.本人推荐两个题源网站: 英文题源网站 Codeforce 中文题源网站 51nod 拿到的题源一定要确保只能能够写出所有解法,可能题目

包建强的培训课程(5):面试中的算法题

Normal 0 10 pt 0 2 false false false EN-US ZH-CN X-NONE $([{£¥·‘“〈<「『[[[〝﹙﹛﹝$(.[{£¥ !%),.:;>?]}¢¨°·ˇˉ―‖’”…‰′″›℃∶.."〉>」』]]]〞︶︺︾﹀﹄﹚﹜﹞!"%'),.::?]`|}-¢ /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0;

笔试算法题

转自:http://www.cnblogs.com/xwdreamer/archive/2011/12/13/2296910.html 1.把二元查找树转变成排序的双向链表 题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表.要求不能创建任何新的结点,只调整指针的指向.   10  / \  6  14 / \ / \4  8 12 16 转换成双向链表4=6=8=10=12=14=16.  首先我们定义的二元查找树 节点的数据结构如下: struct BSTreeNode{  i