题意:输出第n大的质因数只有2,3,5,7的数
分析:预处理满足这些条件的数,然后输出dp[n]就行,满足条件的数无非就是2,3,5,7不断的做乘积
这题的关键就是如何把这些乘积从小到大存入数组:设置四个计数器p2,p3,p5,p7完成这个任务
代码:
#include<iostream>
#include<cstdio>
#define min(a,b) (a<b?a:b)
using namespace std;
int n,dp[6000];
void check()
{
int p2,p3,p5,p7;
p2=p3=p5=p7=1;
dp[1]=1;
int i=1;
while(dp[i]<=2000000000){
int m1=min(2*dp[p2],3*dp[p3]);
int m2=min(5*dp[p5],7*dp[p7]);
int mi=min(m1,m2);
dp[++i]=mi;
if(dp[i]==2*dp[p2]) p2++;
if(dp[i]==3*dp[p3]) p3++;
if(dp[i]==5*dp[p5]) p5++;
if(dp[i]==7*dp[p7]) p7++;
}
}
int main()
{
check();
while(cin>>n){
if(!n) break;
cout<<"The "<<n;
if(n%100==11||n%100==12||n%100==13) cout<<"th";
else if(n%10==1) cout<<"st";
else if(n%10==2) cout<<"nd";
else if(n%10==3) cout<<"rd";
else cout<<"th";
cout<<" humble number is "<<dp[n]<<"."<<endl;
}
}HDU 1058 Humble Numbers--DP--(计数器技巧)
原文地址:http://blog.csdn.net/ac_0_summer/article/details/46392117