/*********************************************************************
题目:我们把只包含因子2、3和5的数称作丑数。求按从小到大的顺序的第1500个
丑数。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做第
一个丑数。
*********************************************************************/
#include<stdio.h>
int Min(int number1, int number2, int number3);
int GetUglyNumber_Solution2(int index)
{
if(index <= 0)
return 0;
int* pUglyNumbers = new int[index];
pUglyNumbers[0] = 1;
int nextUglyIndex = 1;
int* pMultipy2 = pUglyNumbers;
int* pMultipy3 = pUglyNumbers;
int* pMultipy5 = pUglyNumbers;
while(nextUglyIndex < index)
{
int min = Min(*pMultipy2 * 2, *pMultipy3 * 3, *pMultipy5 * 5);
pUglyNumbers[nextUglyIndex] = min;
//使*pMultipy2 * 2 ,*pMultipy3 * 3,*pMultipy5 * 5最接近最小的丑数
while(*pMultipy2 * 2 <= pUglyNumbers[nextUglyIndex])
++pMultipy2;
while(*pMultipy3 * 3 <= pUglyNumbers[nextUglyIndex])
++pMultipy3;
while(*pMultipy5 * 5 <= pUglyNumbers[nextUglyIndex])
++pMultipy5;
++nextUglyIndex;
}
int ugly = pUglyNumbers[nextUglyIndex - 1];
delete[] pUglyNumbers;
return ugly;
}
int Min(int number1, int number2, int number3)
{
int min = (number1 < number2) ? number1 : number2;
min = (min < number3) ? min : number3;
return min;
}
void test()
{
printf("%d\n",GetUglyNumber_Solution2(1500));
}
int main()
{
test();
return 0;
}
==参考剑指offer
丑数
最新推荐文章于 2025-06-19 10:30:22 发布