藍橋杯-最少砝碼,設計砝碼


題目

求能稱量1、2、3......N的天平需要的最少砝碼數,砝碼可放置在天平兩側

題解

維護一個量程range始終處於最優解,即當重量 i 超量程時添加一個盡可能大的砝碼

下邊計算需要添加多大的砝碼:

對於量程為range時添加一個重為w的砝碼
會出現新的量程:
[0,1,2...range,w-range,w-range+1...w,w+1,w+2....w+range]
為了使量程連續所以:
w-range=range+1;
w=2*range+1;

此時新砝碼w=2*range+1是使得量程增量最大化的砝碼

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int range = 1;  //量程
        int res = 1;    //砝碼數
        while(range<n){
            range+=(range+range+1);
            res++;
        }
        System.out.println(res);
    }
}

時間復雜度O(logN),空間復雜度O(1)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM