HDU 1058 Humble Numbers--DP--(计数器技巧)

来源:互联网 发布:数据铭品 编辑:程序博客网 时间:2024/06/06 12:55

题意:输出第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;}}


0 0
原创粉丝点击