只包含因子2,3,5的数叫丑数,求从小到大顺序的第1500个丑数,例如6,8都是丑数,但14不是。因为它包含因子7。习惯上我们认为1是丑数。
思路:丑数肯定是由丑数*2或3或5生成的。由空间换时间的做法。
#include<iostream>
using namespace std;
int Min(int num1,int num2,int num3){
int min=(num1 < num2) ? num1 : num2;
min=(min < num3) ? min : num3;
return min;
}
int uglyNumber(int index){
if(index <= 0)
return 0;
int *pUglyArray = new int[index];
// memset(pUglyArray,1,sizeof(pUglyArray));
pUglyArray[0] = 1;
int *p2 = pUglyArray;
int *p3 = pUglyArray;
int *p5 = pUglyArray;
int nextIndex = 1;
while(nextIndex < index){
int min = Min(*p2*2,*p3*3,*p5*5);
pUglyArray[nextIndex] = min;
while(*p2 * 2 <= pUglyArray[nextIndex])
p2++;
while(*p3 * 3 <= pUglyArray[nextIndex])
p3++;
while(*p5 * 5 <= pUglyArray[nextIndex])
p5++;
nextIndex++;
}
int ugly=pUglyArray[nextIndex-1];
for(int i = 0; i < index; i++){
cout<<pUglyArray[i]<<" ";
}
delete[] pUglyArray;
return ugly;
}
int main(){
int index = 10;
cout<<"第"<<index<<"个丑数是"<<uglyNumber(index);
system("pause");
return 0;
}