原題位置:https://ac.nowcoder.com/acm/contest/327/C
問題描述:
有一套砝碼,每一個砝碼都是正整數。
這套砝碼必須能夠精確測量出N以內所有正整數的質量,則該套砝碼至少需要多少個砝碼?
你可以在天平的任意一邊放置砝碼。
輸入描述:
一行,一個正整數n
1<=n<=101000
輸出描述:
一個整數,表示最少的砝碼數
思路:
本題是梅氏砝碼問題,首先1克的砝碼必用,此時可以測得的質量爲1克;
接下來設下一個砝碼爲x克,由於砝碼可以選擇不放、放左、放右,配合已知的1克砝碼,此時可測得的質量爲x-1,x,x+1;
由於是要求連續精確測質量,故x-1=1+1,即最大已知砝碼重量或可實現砝碼重量+1克(整數)。x-1=2,x=3,此時可測得的質量爲1,2,3,4;
當放置下一個砝碼時,之前可得的1,2,3,4克砝碼重量都可以使用,即新增了x-4,x-3,x-2,x-1,x,x+1,x+2,x+3,x+4,於是x-4=4+1,x-1=5,x=9;
以此類推,發現增加的砝碼質量是1、3、9、27...(3的n-1次方)。
且每次增加新砝碼後,新的最大重量是增加之前的最大重量的三倍+1。
比如:
0-> 1: 1=3*0+1
1-> 4: 4=3*1+1
4->13:13=3*4+1
代碼:
import java.util.Scanner;
import java.lang.Math;
public class Main {
public static void main(String args[]) {
Scanner in=new Scanner(System.in);
int N=in.nextInt();//所求質量
int range=0;//能覆蓋到的範圍
int i = 0;//第i個砝碼
while(N>range) {//所求質量不在覆蓋範圍
i++;//加一個砝碼
range=3*range+1;//加一個砝碼後可覆蓋範圍改變
}
}
}
---------------------
作者:happyaaakkk
來源:CSDN
原文:https://blog.csdn.net/aaakkk_1996/article/details/86635002
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!
備註:發佈時有排版和表述修改。