C\C++編程題之尋找醜數

醜數的定義:醜數是指那些因子只含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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章