題目:我們把只包含因子2,3,和5的數稱作醜數(ugly number)。求按從小到大的順序的第1500個醜數。例如6,8都是醜數,但14不是,因為它包含因子7,習慣上我們把1當做第一醜數。
思路:1,傳統方法,乙個數乙個數判斷
2,第一種方法效率太低,主要是不是醜數也需要花費時間進行判斷。我們可以把醜數看做乙個陣列,另p2,p3,p5為指向陣列某個醜數的指標。因為下乙個醜數一定是由前面的醜數乘以2,3或5得到的。所以我們只需要判斷出醜數陣列的大小順序問題。順序問題可以由p2,p3,p5解決,判斷,p2*2,p3*3,p5*5的最小值作為下乙個醜數保留下來。
演算法一:
源**:
#include "stdio.h"
bool isugly(int number)
int getuglynumber(int index)
} return number;
}void main()
結果:
result:24press any key to continue
演算法二:
源**:
#include "stdio.h"
int min(int number1,int number2,int number3)
{ int min=(number1
1,1,1
min:2
2,1,1
min:3
2,2,1
min:4
3,2,1
min:5
3,2,2
min:6
4,3,2
min:8
5,3,2
min:9
5,4,2
min:10
6,4,3
min:12
8,5,3
min:15
8,6,4
min:16
9,6,4
min:18
10,8,4
min:20
12,8,5
min:24
reslut:24press any key to continue
劍指Offer 面試題34 醜數
我們把只包含因子2 3和5的數成為醜數,求按從小到大的順序的第1500個醜數。例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做第乙個醜數。分析 逐個判斷整數是不是醜數,直觀但是效率低下。根據醜數的定義,醜數只能被2 3和5整除,也就是說乙個數能被2整除,我們把它連續除以2 如果能...
劍指offer面試題 34 醜數
題目描述 把只包含因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。思路分析 思路一 逐個判斷每個整數是不是醜數的解法,直觀但不高效 牛客網測試超時 所謂乙個數m是另乙個數n的因子,是...
劍指offer 面試題34 醜數
劍指offer 面試題34 醜數 題目 把只包含質因子2 3和5的數稱作醜數 ugly number 例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。思路 給乙個陣列存放當前已有的醜數,這些醜數都是按順序存放的,每次計算新的醜數時,...