2021蓝桥杯javaB---最少砝码

27 篇文章 1 订阅

1.【问题描述】
你有一架天平。现在你要设计一套砝码,使得利用这些砝码可以称出任意小于等于 N 的正整数重量
那么这套砝码最少需要包含多少个砝码?注意砝码可以放在天平两边。
【输入格式】
输入包含一个正整数 N。
【输出格式】
输出一个整数代表答案。
【样例输入】
7
【样例输出】
3
【样例说明】
3 个砝码重量是 1、4、6,可以称出 1 至 7 的所有重量。
1 = 1;
2 = 6 − 4 (天平一边放 6,另一边放 4);
3 = 4 − 1;
4 = 4;
5 = 6 − 1;
6 = 6;
7 = 1 + 6;
少于 3 个砝码不可能称出 1 至 7 的所有重量。
【评测用例规模与约定】
对于所有评测用例,1 ≤ N ≤ 1000000000。

2.思路及函数接口
(1)Math.pow(a,b)方法获得值的类型是double型
含义是a的b次方

因为砝码的重量要尽可能大,所需要的数量才会尽可能小
比如有一个砝码的(最大称1,砝码组合1)
1=1

比如有两个砝码最大可以称4,所以选砝码1,3)
因为下一次要称2,所以重量级砝码x-1=2,所以x=3
重量级砝码减去原有的砝码重量=下一个所求的砝码重量
(1)1,2 可以称重量为
1=1
2=1
3=1+2
(2)1,3可以称重量为
1=1
2=3-1
3=3
4=1+3
(3)1,4可以称重量
1 =1
3=4-1
4=4
5=4+1(所以排除,称不出2)

比如有三个砝码(最大可以称13,砝码组合1,3,9)
(1)1,4,6可以称
1=1
2=6-4
3=4-1
4=4
5=1+4
6=6
7=1+6
(2)1,3可以称4 下一个应该要称5,所以重量级砝码应该等于x-4=5,所以x=9
1,3,9砝码组合
1=1
2=3-1
3=3
4=1+3
5=9-1-3
6=9-3
7=9-3+1
8=9-1
9=9
10=9+1
11=9+(3-1)
12=9+3
13=1+9+3

比如要有4个砝码
下一次应该称14,所以重量级砝码-13=14,所以x=27
所以砝码组合1,3,9,27,最大可称出1+3+9+27=40

总结
砝码数量 1 当前砝码组合最重的砝码1 可称最大重量1
砝码数量 2 当前砝码组合最重的砝码3 可称最大重量4=1+3
砝码数量3 当前砝码组合最重的砝码9 可称最大重量13=1+3+9
砝码数量 4 当前砝码组合最重的砝码27 可称最大重量40=1+3+9+27
所以可称最大重量是首项为1,公比为3的等比数列求和
所以s=a1(1-q^n)/1-q
n为当前砝码数量

3.代码实现

package 蓝桥杯;

import java.util.Scanner;

public class 最少砝码 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc=new Scanner(System.in);
		int num=sc.nextInt();//输入的要称的砝码重量
		int sum=0,n=0;
		while(sum<num)
			//sum是利用首项为1,公比为3,求和得到的可称的最大数量
			//任意小于等于 num的正整数重量
		{
			sum+=Math.pow(3,n);
			n++;
		}
		System.out.print(n);
		
		

	}

}
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值