hdu 1058 Humble Numbers

来源:互联网 发布:软件测试三角形问题 编辑:程序博客网 时间:2024/06/05 00:52

hdu  1058  Humble Numbers             题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1058

类型纠结中……可以算DP么?

题目大意:新定义了一种数叫Humble Number,这种数的因子中除了2、3、5、7,就没有别的质数了,把这种数排成一列,输入n,输出Humble[n]。

题目分析:最大到了二十亿,肯定是要打表了,还要从小到大找,不得不说代码中那种方法比较神奇。还有个问题就是序数词后缀,英语不是太烂的肯定so easy。

code:

#include<stdio.h>#include<string.h>int min(int a,int b){return a<b?a:b;}int min4(int a,int b,int c,int d){return min(min(a,b),min(c,d));}void assign(char*s,char*c){int i,n=min(strlen(s),strlen(c));for(i=0;i<n;i++)s[i]=c[i];}int main(){int a,b,c,d,e1,e2,e3,e4,i,p[6000];p[1]=a=b=c=d=1;for(i=2;i<6000;i++){e1=p[a]*2;e2=p[b]*3;e3=p[c]*5;e4=p[d]*7;p[i]=min4(e1,e2,e3,e4);if(p[i]==e1)a++;if(p[i]==e2)b++;if(p[i]==e3)c++;if(p[i]==e4)d++;}while(scanf("%d",&a),a){char s[3]="ab";b=a%100/10;c=a%10;if(c>0&&c<4)if(b==1)assign(s,"th");else if(c==1)assign(s,"st");else if(c==2)assign(s,"nd");else assign(s,"rd");else assign(s,"th");printf("The %d%s humble number is %d.\n",a,s,p[a]);}return 0;}
PS:参考的那一篇说这是DP,感觉似乎有点勉强吧……我把它归到数学模拟了。




0 0
原创粉丝点击