XTU1254 Blance 如何实现称出1∼n 克的物品,请问最少需要几颗砝码?
题目描述
小明有一架天平,小明想称出1∼n 克的物品,请问最少需要几颗砝码?
比如小明想称出1∼4 克的物品,需要2颗砝码,为1和3克。
balance
输入
第一行是一个整数T(1≤T≤10000) ,表示样例的个数。 以后每行一个样例,为一个整数 (1≤n≤10 9 )。
输出
每行输出一个样例的结果。
样例输入
3
1
4
40
样例输出
1
2
4
证明一个定理(了解于知乎)
一、结论:
假设使用n+1个砝码,
对于每个n,可以称出的N的范围在
多于这个范围需要n=n+1,少于这个范围则只需要到n=n-1即可
对于题主提出的情况即为n=3,
二、应用:
对于任意N,根据(一)中闭区间的范围求出n值,即可得到所需求的砝码个数(n+1)。
假如N=6546587,求出log(6546587, base=3)~=14.2857, 即需要15个砝码,从1,3,9,27一直到3^14=4782969;由这15个砝码可以最多称出1-7174453中任何一个数字。
证明:
数学归纳法:
(1)对n=0,1,2,口算成立
(2)假设有k个砝码,可以称出不大于
的所有组合。
(3)那么加入第k+1个砝码:
我们可以看到
也即恰好为
的中间值,离两个端点的距离均为
。
而这个值正是(2)中k个砝码可以完美覆盖的数值范围
作者:周欣宇
链接:https://www.zhihu.com/question/30164499/answer/47003542
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
TIJIE:首先,放左面,放右面,和不放 有三种状态,把它想象成一个三进制问题;
即可以用1,3*3,3*3*3………等等来表示最少问题
下面给出AC代码:
#include <cstdio>
#include <iostream>
using namespace std;
int main(){
freopen();
long long T,n;
cin>>T;
{
while(cin>>n){
long long ans = 0;
long long t = 1 , sum = 0;
while(sum<n){
ans++;
sum+=t;
t*=3;
}
cout<<ans<<endl;
}
}
return 0;
}
XTU1254 Blance 如何实现称出1∼n 克的物品,请问最少需要几颗砝码?的更多相关文章
- 至少要几个砝码,可以称出 1g ~ 40g 重量
请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...
- HDU5616 天平能否称出物体重量问题 01背包变形或者折半搜索
//hdu5616 void solve1(){dp[0]=1;for(int i=1;i<=n;i++){for(int j=INF;j>=val[i];j--){dp[j]|=(dp[ ...
- 求用1g、2g、3g的砝码(每种砝码有无穷多个)称出10g的方案有几种
#include <iostream> using namespace std; // ; // sup是保存多项式的数组,sup[n]中的值代表指数为i的系数 ,下标i是x的指数 // ...
- 一块40克的砝码,摔成4块,利用天平,刚好可以称出1~40g所有整数克,问:这4块分别是多少克
public static void main(String[] args) { List<Integer> list = new ArrayList<>();//记录每组数的 ...
- 设计一套砝码要求能称量出1 ~ 100g之间的任意重量,请问至少需要多少个砝码?以及每个砝码各自的重量是多少?
解析: 1g => 1g 2g => 1g 1g => 1 ~ 2g之间的重量 => 1g 2g => 1 ~ 3g之间的重量 4g => 1g 2g 1g =&g ...
- MT【142】Bachet 问题,进位制
问题: 满足下面两种限制条件下要想称出40以内的任何整数重量,最少要几个砝码: i)如果砝码只能在天平的某一边; ii)如果砝码可以放在天平的两边. 提示:对于 i)先证明如下事实: \[\textb ...
- NOI题库--砝码称重V2(多重背包2^n拆分)
以前只会写多重背包的原版,渣的不行,为了做此题不得不学习了一下,发现其实也不难,只要理解了方法就好多了(PS:其实和倍增挺像的) 8756:砝码称重V2 总时间限制: 1000ms 内存限制: 655 ...
- P2347 砝码称重 (01背包)
题目描述 设有 1g1g1g . 2g2g2g . 3g3g3g . 5g5g5g . 10g10g10g . 20g20g20g 的砝码各若干枚(其总重 ≤1000 \le 1000≤1000 ), ...
- 洛谷P2347 砝码称重 【多重背包】(方案数)(经典)
题目链接:https://www.luogu.org/problemnew/show/P2347 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入 ...
随机推荐
- Linux第八周作业
一 理解编译链接的过程和ELF可执行文件格式 这张图说明了可执行程序的产生 大致过程为 .c文件汇编成汇编代码.asm, 然后再汇编成目标码.o, 然后链接成可执行文件a.out, 这时可执行文件就可 ...
- Asp.Net 中 HTTP 和 HTTPS 切换
Asp.Net 中 HTTP 和 HTTPS 切换 目的 HTTP,超文本传输协议,明文传输,无状态,服务器默认端口80 HTTPS,具有SSL加密的HTTP,加密传输,需要申请ca证书,服务器默 ...
- JavaScript -基础- 函数与对象(三)Date对象
一.Date对象 1.创建方法 var date_obj=new Date(); alert(date_obj.toLocaleString()) var date_obj=new Date(&quo ...
- RabbitMQ 循环调度
循环调度是针对Consumer消费者来说的.如果有多个Consumer订阅同一个队列的消息,RabbitMQ会自动按照顺序将消息发送到每一个Consumer手中. 就是这么简单!
- bs4 CSS选择器
#https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html#find-all #beautifulSoup可以解析HTML ...
- VBA续嘘嘘——宏技巧集绵
什么是VBA?它有什么作用? A.实现Excel中没有实现的功能. B.提高运行速度. C.编写自定义函数. D.实现自动化功能. E.通过插入窗体做小型管理软件. VBA在哪里存放的?怎么运行? A ...
- 怎么搜索sci论文。
进入清华大学图书馆,选择常用数据库,找到 Web of Science平台(SCI/SSCI/AHCI.ISTP/ISSHP.DII.JCR.BP.CCC.CCR/IC.ESI.INSPEC…)即可. ...
- VS2010编译Unigine_2010源码
VS2010编译Unigine_2010源码[Debug版本] 1.Laucher工程属性改为控制台项目 2.Unigine工程编译时的Warnning LNK2019 a.属性--常规-目标文件名改 ...
- jdk8-lanbda方法引用和构造引用
1.方法引用概念及实例 1.对象实例方法 语法格式: 对象::实例方法名称 注意点: 实例方法必须和被实现的接口中定义的方法的参数列表和返回值一致.一般适合于一个方法就实现了的. 2.类::静态方法 ...
- 学习python二三事儿(二)
多个变量赋值 Python允许你同时为多个变量赋值.例如: a = b = c = 1 以上实例,创建一个整型对象,值为1,三个变量被分配到相同的内存空间上. 您也可以为多个对象指定多个变量.例如: ...