0
点赞
收藏
分享

微信扫一扫

蓝桥杯2021年B组真题——G砝码【内附真题资料和解题思路】

兵部尚输 2022-03-12 阅读 38

题目描述:
在这里插入图片描述
在这里插入图片描述
先修:
在看这个问题之前先看一个简化版的问题:对原题目进行限制,让砝码只能放到物品的对侧而不是俩边都放,问至少需要多少个砝码?
👇思路:将题目转化为数学问题也就是:给一个整数N,要求能够用最少的一套数字(对应一套砝码)通过加法(也就是放到物品对侧)得到1~N的所有数字。这一套数字(砝码)每一个只能用一次,也可以不用。
例如:给一个整数7,我们选的一套砝码是{1,2,4}
因为:1=1;2=2;3=1+2;4=4;5=1+4;6=2+4;7=1+2+4.
最好需要3个砝码。
👇不难发现这套砝码{1,2,4}刚好都是2的次方,实际上如果N再比7大比16小,我们只需要在加一个砝码8,就可以了,因为再加一个8后,就可以用{1,2,4,8}表示1~15的所有数字了
那么原因呢?为什么刚好都是2的次方?
这就要想到二进制了,二进制中各位的权值不就刚好都是2的次方,而且二进制作为一种数的表示,它当然是连续的,可以表示1到2n-1中的所有数。
总结一下:

二进制中各位上的权值就代表砝码的重量(1,2,4,8……)
某一位上的数字是0或1,对应使用或不使用该砝码俩个状态,如101就是表示用4和1俩个砝码而不用2砝码
二进制表示的数一定是连续的,它可以表示1到2n-1中的所有数,对应题目中"称出任意小于等于N的正整数重量"。
⭐所以只要给定一个N,我们判断一下N的范围,比如N=24,则有16<=N<32,至少需要一个5位的二进制才能表示这个数,也就是需要至少5个砝码才能保证称出这个物体的重量,且这五个砝码的重量是{1,2,4,8,16}。

正题题解:
理论先知:平衡三进制,也称为对称三进制,是一种以3为基数,以-1,0,1为基本数码的三进制计数体系。
平衡三进制,也称为对称三进制,是一种以3为基数,以-1,0,1为基本数码的三进制计数体系。
平衡三进制与三进制最大的区别就是用-1代替了原来的2,试着把一个十进制数转化为平衡三进制。
步骤:十进制->三进制->平衡三进制(用x代替-1)
例如:
4->11(三进制数中本身没有2不需要进一步转换)
5->12->1xx(验证:1×9+(-1)×3+(-1)×1=5)
把三进制转化为平衡三进制的步骤是:若数中没有2不需要进一步转化,若有,从右向左,把2变成-1,变成-1意味着该位减去3,所以下一位加一,依次转换。

研究一下为什么要用平衡三进制:
仔细想想哈,这个题目呢,它既可以放在左边又可以放在右边,刚好符合我们的平衡三进制,就是当与物品同边的话,为负,反边为正;在平衡三进制中和上面二进制的一样能够表达连续的数值;

三进制中各位上的权值也可以代表砝码的重量(1,3,9,27……)
平衡三进制表示的数一定是连续的,它可以表示1到(3^n-1)/2中的所有数(不考虑负数),对应题目中"称出任意小于等于N的正整数重量"。
某一位上的数字是0或1或-1,分别对应不使用该砝码,该砝码放到物品对侧,该砝码放到物品同侧
例如:16对应1zz1则表示需要27和1砝码放到对侧,3和9砝码放到同侧 即:16=27+1-9-3
⭐所以只要给定一个N,我们判断一下N的范围,比如N=16,则有(33-1)/2<N<=(34-1)/2,至少需要一个4位的平衡二进制才能表示这个数,也就是需要至少4个砝码才能保证称出这个物体的重量,且这4个砝码的重量是{1,3,9,27}。
题解代码:

public static void main(String[] args){
	Scanner sc = new Scanner(System.in);
	int sum = sc.nextInt();
	int x = 0;
	for(int i = 0;i<sum;i++){
		x = (int)(Math.pow(3,i)-1)/2;
		if(x>N){
		System.out.println(i);
		break;
		}
	}
}

参考博客

举报

相关推荐

0 条评论