【算法記錄】梅式砝碼問題

原題位置: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 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!
備註:發佈時有排版和表述修改。

發佈了14 篇原創文章 · 獲贊 33 · 訪問量 9368
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章