尋找丑數


1、題目要求:

  我們把只包含因子2、3和5的數稱作丑數(Ugly Number),求按從小到大的順序的第1500個丑數。例如6、8都是丑數,但14不是,因為它包含因子7。習慣上我們把1當做第一個丑數。

  提示:丑數= (x、y、z大於等於0的整數)

 

  輸出第1500個丑數。

2、設計思路:

  傳統方法(1)通過創建循環,連續%2、%3、%5得出最后的余數。

                      (2)如果最終的余數為0,即可確定最終的丑數。

                      (3)確定丑數的過程中加入變量限定丑數的個數即可。

  改進方法(1)選取最小丑數1,將其分別乘2/3/5得到對應的新丑數。

      (2)分別用三個變量來表示最近一個丑數*2/*3/*5得到的丑數

      (3)當三個變量中其中的最小值被選作丑數時,該數應該自增,方便下次作為索引值繼續乘對應的數據,避免數據重復乘法運算

3、源代碼:

package cn.test.termtest.uglynumber;

public class Ugly {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(GetUglyNumber1(1500));
    }
    public static int GetUglyNumber1(int index) {
        if(index <7)
            return index;
        int ugly[] = new int[index];  //定義一個數組,用來存放每一個元素。
        ugly[0] =1;      //第一個丑數
        int m2 =0;       //最近一次乘2得到的丑數
        int m3 =0;       
        int m5 =0;
        for(int i=1; i< index;i++) {
            ugly[i] = Math.min(ugly[m2] * 2,Math.min(ugly[m3] * 3,ugly[m5] * 5));
            if(ugly[i]==ugly[m2] * 2)
                m2++;
            if(ugly[i]==ugly[m3] * 3)
                m3++;
            if(ugly[i]==ugly[m5] * 5)
                m5++;
        }
        return ugly[index - 1];
    }
    
}

 


免責聲明!

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



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