醜數的定義:醜數是指那些因子只含2,3,5的數,爲方便起見,1也視爲醜數
故1,2,3,4,5,6,8,9,10,12,15是最前面的醜數,請編寫一個程序,輸出第N(N<=300)個醜數。(N爲輸入值)
如果輸入非法值,請返回 -1
一些轉化的例子:
輸入整數N = 5
輸出的醜數是5
思路:此題的關鍵是判決醜數,即給定一個數怎麼判斷是否滿足因子只含2,3,5。我們這樣來做,比如給的數是num,如果num%2 == 0,則num/=2,一直循環,如果num == 1則num的因子只有2,同理對3,5做同樣的事情。
程序
#include <stdlib.h>
/* 功能:輸入一個整數n,輸出第n個醜數的值
* 輸入:輸入的整數
* 輸出:無
* 返回:輸出第N個醜數,如果N小於等於0返回-1
*/
bool UglyNumber(int num)
{
while(num%2==0)
{
num/=2;
}
while(num%3==0)
{
num/=3;
}
while(num%5==0)
{
num/=5;
}
return num==1;
}
int FindUglyNumber(int N)
{
if(N <= 0 || N >300)
return -1;
int cnt = 0;
int num = 1;
while(num)
{
if(UglyNumber(num))
{
cnt++;
}
if(cnt == N)
{
return num;
}
num++;
}
return 0;
}