题目:我们把只包含因子2、3和5的数称作丑数。求按照从小到大的顺序的第1500个丑数。
#include <stdio.h>
int Min(int a, int b, int c)
{
int min = (a<b)?a:b;
min = (min<c)?min:c;
return min;
}
int find_ugly(int n)
{
if(n<=0)
return 0;
int *pugly = new int[n];//数组按照由小到大的顺序存储每个丑数
pugly[0] = 1;//第一个丑数是1
int next_ugly = 1;//数组下标
int *num_2 = pugly;//指向乘以2得到的丑数
int *num_3 = pugly;//指向乘以3得到的丑数
int *num_5 = pugly;//指向乘以5得到的丑数
while(next_ugly < n)
{
int min = Min(*num_2*2,*num_3*3,*num_5*5);//判断这三个数的值哪个最小,并将其赋值给数组
pugly[next_ugly] = min;
if(*num_2*2 == pugly[next_ugly])//如果最小值是乘以2得到的,则指针加1
++num_2;
if(*num_3*3 == pugly[next_ugly])//如果最小值是乘以3得到的,则指针加1
++num_3;
if(*num_5*5 == pugly[next_ugly])//如果最小值是乘以5得到的,则指针加1
++num_5;
++next_ugly;
}
int ugly = pugly[n-1];
delete [] pugly;
return ugly;
}
int main()
{
int n;
printf("请输入查找第几个丑数:\n");
scanf("%d",&n);
int ugly = find_ugly(n);
printf("第%d个丑数是%d\n",n,ugly);
return 0;
}