題目:我們把只包含因子 2、3 和 5 的數稱作醜數(ugly number)。例如 6、8 都是醜數,
但 14 不是,因為它包含因子 7。習慣上我們把 1 當做是第乙個醜數。
求按從小到大的順序的第 1500 個醜數。
思路:1. 數字從1遞增,判斷是不是醜數
2. 用2、3、5分別乘以已有的醜數,用大於當前的醜數的結果中最小的作為當前的醜數 快!
/*64. 尋找醜數(運算)。
題目:我們把只包含因子 2、3 和 5 的數稱作醜數(ugly number)。例如 6、8 都是醜數,
但 14 不是,因為它包含因子 7。習慣上我們把 1 當做是第乙個醜數。
求按從小到大的順序的第 1500 個醜數。
*/#include
#include
int uglynum(int n) //
輸入要找第幾個醜數
else
if (d % 3 == 0
)
else
if (d % 5 == 0
)
else
}if (0 ==flag)
}return (i - 1);}
int uglynum2(int n) //
輸入要找第幾個醜數
int* data = (int *)malloc(n * sizeof
(n));
data[
0] = 1
;
int b[3] = ;
for (int i = 1; i < n; i++)
break
; }}}
data[i] =mintmp;
}int ans = data[n - 1
]; free(data);
return
ans;
}int
main()
return0;
}
網上看答案,發現自己寫的不好,雖然思路一樣,但是我寫的看起來很亂。而且在方法二中我對 2 3 5都是從第乙個數字開始乘,實際上可以用三個指標記錄上一次乘到**了,下一次從記錄位開始找就好了。
還有,有些子功能可以寫成子函式,可以讓整個**看起來更清晰。
裡的**就看起來很舒服。
方法一:
bool isugly(intnumber)
int getuglynumber_solution1(int
index)
}return
number;
}
方法二:
int getuglynumber_solution2(intindex)
int ugly = puglynumbers[nextuglyindex - 1
]; delete puglynumbers;
return
ugly;
}int min(int number1, int number2, int
number3)
64 尋找醜數
64.尋找醜數。題目 我們把只包含因子 2 3 和 5 的數稱作醜數 ugly number 例如 6 8 都是醜數,但 14 不是,因為它包含因子 7。習慣上我們把 1 當做是第乙個醜數。求按從小到大的順序 的第 1500 個醜數。分析 這是一道在網路上廣為流傳的面試題,據說 google 曾經採...
尋找第1500個醜數
諾西筆試最後一道題,題意 把只包含質因子2 3和5的數稱作醜數 ugly number 例如 2,3,4,5,6,8,9,10,12,15,等,習慣上我們把1當做是第乙個醜數。寫乙個高效演算法,返回第n個醜數。最普通 也最耗時 的做法是從1開始遍歷,然後判斷這個數的因式分解中只包含2,3,5,滿足則...
尋找第n個醜數
實現 編寫乙個程式,找出第n個醜數。乙個數的因子僅僅包括2,3,5的數稱為醜數。說明1 數字1特別對待也看作是醜數。說明2 從1開始的10個醜數分別為1,2。3。4,5,6,8,9。10。12。該題理解的關鍵之處在於 從醜數分解出來的因子,一定是乙個醜數,即醜數一定是由醜數相乘得到的。所以,醜數的2...