面試題之__ 星際穿越(java實現)

題目描述
航天飛行器是一項複雜而又精密的儀器,飛行器的損耗主要集中在發射和降落的過程,科學家根據實驗數據估計,如果在發射過程中,產生了 x 程度的損耗,那麼在降落的過程中就會產生 x2 程度的損耗,如果飛船的總損耗超過了它的耐久度,飛行器就會爆炸墜毀。問一艘耐久度爲 h 的飛行器,假設在飛行過程中不產生損耗,那麼爲了保證其可以安全的到達目的地,只考慮整數解,至多發射過程中可以承受多少程度的損耗?

輸入描述:
每個輸入包含一個測試用例。每個測試用例包含一行一個整數 h (1 <= h <= 10^18)。

示例1

  • 輸入 10

輸出

  • 2

編程實現:

import java.util.Scanner;
/**
 * 星際穿越
 * @author cc_小白成長
 *
 */
public class TestInterstellar {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //注意 重點1 題目給定h值的範圍 1 <= h <= 10^18 明顯大於int類型的max值
        long h = sc.nextLong();
        long max = (long) Math.sqrt(h);//注意 重點2 使用sqrt函數平方根 縮小範圍,我們這裏只需要整數,允許精度損失
        for(long i = max;i>=max/2;i--){
            if((i*i+i)<=h){
                System.out.println(i);
                return ;
            }
        } 
    }
}

測試 :
12
結果:3

需要注意兩個重點的理解;
歡迎交流學習。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章