题目描述

小明有一架天平,小明想称出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 克的物品,请问最少需要几颗砝码?的更多相关文章

  1. 至少要几个砝码,可以称出 1g ~ 40g 重量

    请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...

  2. 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[ ...

  3. 求用1g、2g、3g的砝码(每种砝码有无穷多个)称出10g的方案有几种

    #include <iostream> using namespace std; // ; // sup是保存多项式的数组,sup[n]中的值代表指数为i的系数 ,下标i是x的指数 // ...

  4. 一块40克的砝码,摔成4块,利用天平,刚好可以称出1~40g所有整数克,问:这4块分别是多少克

    public static void main(String[] args) { List<Integer> list = new ArrayList<>();//记录每组数的 ...

  5. 设计一套砝码要求能称量出1 ~ 100g之间的任意重量,请问至少需要多少个砝码?以及每个砝码各自的重量是多少?

    解析: 1g => 1g 2g => 1g 1g => 1 ~ 2g之间的重量 => 1g 2g => 1 ~ 3g之间的重量 4g => 1g 2g 1g =&g ...

  6. MT【142】Bachet 问题,进位制

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

  7. NOI题库--砝码称重V2(多重背包2^n拆分)

    以前只会写多重背包的原版,渣的不行,为了做此题不得不学习了一下,发现其实也不难,只要理解了方法就好多了(PS:其实和倍增挺像的) 8756:砝码称重V2 总时间限制: 1000ms 内存限制: 655 ...

  8. P2347 砝码称重 (01背包)

    题目描述 设有 1g1g1g . 2g2g2g . 3g3g3g . 5g5g5g . 10g10g10g . 20g20g20g 的砝码各若干枚(其总重 ≤1000 \le 1000≤1000 ), ...

  9. 洛谷P2347 砝码称重 【多重背包】(方案数)(经典)

    题目链接:https://www.luogu.org/problemnew/show/P2347 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入 ...

随机推荐

  1. Vue + Element UI 实现权限管理系统(更换皮肤主题)

    自定义主题 命令行主题工具 1.安装主题工具 首先安装「主题生成工具」,可以全局安装或者安装在当前项目下,推荐安装在项目里,方便别人 clone 项目时能直接安装依赖并启动. yarn add ele ...

  2. linux 播放加密DVDs

    尝试下 https://www.cyberciti.biz/faq/howto-ubuntu-linux-playback-dvd/

  3. CCF关于NOIP2018获奖证书发放的公告

    CCF定于即日起开始受理NOIP2018获奖证书申请.凡获得NOIP2018复赛提高组和普及组一二三等奖的选手均可申请证书.本次获奖证书有电子版和纸质版两种.电子版证书免费发放,纸质版证书收取部分工本 ...

  4. [POJ3416]Crossing

    Problem 给你n个点,m个询问,每个询问有x, y 问以(x,y)为原点建立的平面直角坐标系分割的第一象限和第三象限的点数和减去第二象限和第四象限的点数和 Solution 用2个树状数组维护一 ...

  5. TOleControl(WebBrowser1).Visible := False 这样就可以隐藏浏览器控件

    TOleControl(WebBrowser1).Visible := False 这样就可以隐藏浏览器控件了. ------------------------------------------- ...

  6. 自己写了一个解析json为table的工具类

    还需要完善的包括,css的封装,触发事件,数据的获得处理: <!DOCTYPE html> <html> <head> <meta charset=" ...

  7. Cracking The Coding Interview 1.1

    //原文: // // Implement an algorithm to determine if a string has all unique characters. What if you c ...

  8. Android : VLC for Android 环境搭建及编译

    一.下载VLC源码: git clone https://code.videolan.org/videolan/vlc-android.git 编译apk:   sh compile.sh -a ar ...

  9. Java基础-语法定义

    Java三个体系 Java SE(Java Platform,Standard Edition).Java SE 以前称为 J2SE.它允许开发和部署在桌面.服务器.嵌入式环境和实时环境中使用的 Ja ...

  10. spoon 更新数据

    一个小需求,被要求使用spoon 来同步数据 主要流程为: 1.查询A库未同步数据 id 2.根据步骤1查到的id,作为条件更新B库数据 3.更新B库数据成功则更改库A中的数据状态为已同步. 4.添加 ...