数据超级BT的一个题,WA了 想不明白为什么错,看看别人的AC代码才知道,对于211这样的输出要用th,221要用st。那叫一个泪%>_<%
题意:依序打印出因子只有2,3,5,7的数。
这个题在这章一拿到题就想DP动态方程,楞了半天,怎么想都觉得不是DP。开始的时候想着从1-2000000000依次用筛选法,比较无奈的,无限超时。优化了一下还是不行。
后来的后来就想到因子只有4个,何不计算出所有的数值,然后sort一下。试试写了出来。结果就出现了文章头出现的悲剧,不过,还是被我AC~\(≧▽≦)/~啦啦啦
仔细想想DP也差不多,DP数组中存放的是严格递增的数。
嘿嘿 吖飒 加油!!!
代码:
#include<iostream>
#include<algorithm>
using namespace std;
int num2[31];
int num3[20];
int num5[14];
int num7[12];
int num[6000];
int len=0;
int Calculate()
{
int i,j,k,w;
num2[0]=1;
//31,20,14,12都是计算出来的呀
for(i=1;i<31;i++)
num2[i]=num2[i-1]*2;
num3[0]=1;
for(i=1;i<20;i++)
num3[i]=num3[i-1]*3;
num5[0]=1;
for(i=1;i<14;i++)
num5[i]=num5[i-1]*5;
num7[0]=1;
for(i=1;i<12;i++)
num7[i]=num7[i-1]*7;
int x,y,z;
for(i=0;i<31;i++)
{
for(j=0;j<20;j++)
{
if(2000000000/num2[i]<num3[j]) break;
x=num2[i]*num3[j];
for(k=0;k<14;k++)
{
if(2000000000/x<num5[k]) break;
y=x*num5[k];
for(w=0;w<12;w++)
{
if(2000000000/y<num7[w]) break;
z=y*num7[w];
num[len++]=z;
}
}
}
}
return 0;
}
int main()
{
int n;
Calculate();
sort(num,num+len);
while(cin>>n&&n)
{
if(n%10==1&&n%100!=11) cout<<"The "<<n<<"st humble number is "<<num[n-1]<<"."<<endl;
else if(n%10==2&&n%100!=12) cout<<"The "<<n<<"nd humble number is "<<num[n-1]<<"."<<endl;
else if(n%10==3&&n%100!=13) cout<<"The "<<n<<"rd humble number is "<<num[n-1]<<"."<<endl;
else cout<<"The "<<n<<"th humble number is "<<num[n-1]<<"."<<endl;
}
return 0;
}
分享到:
相关推荐
HDU-1711 Number Sequence(KMP算法)For each test case, you should output one line wh
HDU的1250,主要是利用高精度加法,但是代码有点繁琐,效率不是很高
HDU1059的代码
杭电ACMhdu1163
hdu1001解题报告
hdu 1574 passed sorce
HDU的一题........HDU DP动态规
hdu acm 教案 搜索入门 hdu acm 教案 搜索入门
hdu2101AC代码
搜索 dfs 解题代码 hdu1241
hdu 5007 Post Robot 字符串枚举。 暴力一下就可以了。
hdu acm 教案 动态规划(1) hdu acm 教案 动态规划(1)
ACM HDU题目分类,我自己总结的大概只有十来个吧
hdu1290 解题报告 献给杭电五十周年校庆的礼物 (切西瓜问题,即平面分割空间)
HDU最全ac代码
hdu 1166线段树代码
hdu动态规划算法集锦
自己做的HDU ACM已经AC的题目
hdu题目分类
HDU图论题目分类