程式設計題目 尋找醜數

2022-05-18 11:09:54 字數 1623 閱讀 9272

題目:我們把只包含因子 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(int

number)

int getuglynumber_solution1(int

index)

}return

number;

}

方法二:

int getuglynumber_solution2(int

index)

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...