找到第N個醜數

2021-08-18 02:55:19 字數 1372 閱讀 1241

把只包含因子2、3和5的數稱作醜數(ugly number)。例如6、8都是醜數,但14不是,因為它包含因子7。 習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第n個醜數。

//找到第n個醜數

//方法1:存放num之前所有元素是否是醜數的flag

int getuglynumber_solution(int index)

if(index == 1)

vectorugly_flag;

bool ugly = false;

int num = 1;

int count = 1;

ugly_flag.push_back(false);

ugly_flag.push_back(true);

while(count != index)

else if(num%3 == 0)

else if(num%5 == 0)

else

ugly_flag.push_back(ugly);

if(ugly)

}return num;

}//方法2:遞迴

bool buglynumber(int num)

if(num%2 == 0)

else if(num%3 == 0)

else if(num%5 == 0)

else

}int getuglynumber_solution_2(int index)

int num = 0;

int count = 0;

while(count != index)

}return num;

}//方法3:既省空間又省時間的方法

//醜數陣列公升序排列,且最後乙個數為m

//找到第乙個*2之後大於m醜數m2及其位置t2

//找到第乙個*3之後大於m醜數m3及其位置t3

//找到第乙個*5之後大於m醜數m5及其位置t5

//取min(m2,m3,m5)為下乙個醜數

//得到醜數字置的索引+1。比如m2為最小值,那麼t2++。

int getuglynumber_solution_3(int index)

int num = 1;

int count = 1;

vectorugly;

int t2=0;

int t3=0;

int t5=0;

ugly.push_back(1);

while(count != index)

while(ugly[t3]*3 <= num)

while(ugly[t5]*5 <= num)

}return num;

}

83 找到第n個醜數

2,3,5 6 是醜數 14 不是醜數,包含7 下乙個醜數必定是陣列的某乙個醜數a 2 b 3 c 5 中最小的值 m2,之前的醜數 2都小於當前最大的醜數 之後的醜數 2都大於當前最大的醜數 m3 m5 def getuglynumber index if index 1 return 0 res...

找到第1500個醜數

把只包含質因子2 3和5的數稱作醜數。例如6 8都是醜數,但14不是,因為它包含質因子7。習慣上我們把1當做是第乙個醜數。求按從小到大的順序的第1500個醜數。暴力的一點的方法,可以從1開始遍歷,依次判斷是否是醜數,如果是醜數,計數器 1,當計數器加到1500的時候,這個數字就是醜數了.void v...

返回第n個醜數

把只包含質因子2 3和5的數稱作醜數 ugly number 例如 2,3,4,5,6,8,9,10,12,15,等,習慣上我們把1當做是第乙個醜數。寫乙個高效演算法,返回第n個醜數。解法1 判斷某個數是否為醜數,連續找到第n個醜數 include using namespace std bool ...