![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
//重在理解方法:每次找到最小的 2 3 5 7 的因子数,之后利用所存数的下标的关系改变
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
#include <iostream>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
using namespace std;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int num[5843]; //存储前5842个丑数
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int find_min ( int a, int b, int c, int d )
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int temp = a < b ? a : b;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int index = c < d ? c : d;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
return temp < index ? temp : index;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
void solve ( )
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int i1, i2, i3, i4, i;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int h1, h2, h3, h4;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
i1 = i2 = i3 = i4 = 1;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
num[1] = 1;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
for (i = 2; i < 5843; i ++ )
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
h1 = num[i1] * 2;
h2 = num[i2] * 3;
h3 = num[i3] * 5;
h4 = num[i4] * 7;
int min = find_min ( h1, h2, h3, h4 );
num[i] = min;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
//易错点:这里不可以用else if 因为ti中可能会有相同的最小值,如当:min = 6 时
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
if ( min == h1 )
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
i1 ++;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
if ( min == h2 )
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
i2 ++;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
if ( min == h3 )
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
i3 ++;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
if ( min == h4 )
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
i4 ++;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int main ()
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
solve ();
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
int n;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
while ( scanf ("%d", &n), n )
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
if ( n % 100 != 11 && n % 10 == 1 )
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
printf ("The %dst humble number is %d.\n", n, num[n]);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
else if ( n % 100 != 12 && n % 10 == 2 )
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
printf ("The %dnd humble number is %d.\n", n, num[n]);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
else if ( n % 100 != 13 && n % 10 == 3 )
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
printf ("The %drd humble number is %d.\n", n, num[n]);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
else
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
printf ("The %dth humble number is %d.\n", n, num[n]);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
//system ("pause");
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
return 0;
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
}
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
posted on 2010-09-11 20:56
雪黛依梦 阅读(549)
评论(0) 编辑 收藏 引用 所属分类:
简单题 、
数学题