第十二届蓝桥杯省赛 Java B组 试题 G: 最少砝码

一、问题描述

你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意小于等于 N 的正整数重量。
那么这套砝码最少需要包含多少个砝码?
注意砝码可以放在天平两边。

输入包含一个正整数 N。
输出一个整数代表答案。

7

3

二、解析

用贪心的思想来解决这个问题:尽可能在增加砝码时使得砝码的重量最大。

要称重量为 1,需要砝码 1
重量为 2,增加砝码 3(使增加的砝码尽可能的大,所以不是 1 和 2 )

  • 1 3 可以同时称 ‘1’=1,‘2’+1=3,‘3’=3,‘4’=3+1 ;

所以下一个是5,增加砝码 9(尽可能的大)

  • 1 3 9 可以同时称(除去 1 和 3 能称的):
    ‘5’+3+1=9,‘6’+3=9,‘7’+3=9+1,‘8’+1=9,‘9’=9
    ‘10’=9+1,‘11’+1=9+3,‘12’=9+3,‘13’=1+3+9

下一个是14,增加砝码几呢?

  • n - w
    1 - 3
    2 - 1 3
    5 - 1 3 9

大胆推测一下(或者接着演算),下一个增加的砝码是 9*3=27

由上面演算可知增加的砝码每次乘以三,
可测量的数字为上一轮的 n+w;

三、代码

public static void main(String[] args) {
	Scanner sc=new Scanner(System.in);
	int N=sc.nextInt();
	int n=1;
	int w=1;
	int ans=1;
	while((n+w)<N) {
		n+=w;
		w*=3;
		ans++;
	}
	System.out.println(ans);
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值