HDU 1058 Humble Numbers
2015-07-27 16:22
232 查看
参考过网上的题解才AC的。寻找丑数的过程十分奇妙。主要是有个pos[4]数组记录下标移动的情况。保证答案数组ans
是从小到大升序且无重复的排列。这个世界真奇妙真奇妙真奇妙啊。膜拜想出来此方法的大神,请接受小女子的膝盖Orz…
需要注意的地方是输出的时候关于11,12,13,111,112,113.。的问题、
是从小到大升序且无重复的排列。这个世界真奇妙真奇妙真奇妙啊。膜拜想出来此方法的大神,请接受小女子的膝盖Orz…
需要注意的地方是输出的时候关于11,12,13,111,112,113.。的问题、
[code]#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int N = 5842+10; int ans ; void init() { int temp[4]={2,3,5,7}; int pos[4]={1,1,1,1};//奇妙的地方在这里 ans[1]=1; for(int i=2;i<=5842;i++) { int a[4]; for(int i=0;i<4;i++) a[i]=temp[i]*ans[pos[i]]; int x=2000000000+10; for(int i=0;i<4;i++) x=min(x,a[i]);//找最小值更新保证数组从小到大的顺序 for(int i=0;i<4;i++) if(x==a[i]) pos[i]++;//去重的地方 ans[i]=x;//直接更新 } return; } int main() { init(); int n; while(~scanf("%d",&n)) { if(n==0) break; if(n%10==1 && n%100!=11) printf("The %dst humble number is %d.\n",n,ans );//需要注意的地方!不然你会WA到爽! else if(n%10==2 && n%100!=12) printf("The %dnd humble number is %d.\n",n,ans ); else if(n%10==3 && n%100!=13) printf("The %drd humble number is %d.\n",n,ans ); else printf("The %dth humble number is %d.\n",n,ans ); } return 0; }
相关文章推荐
- MX4 PRO adb无法连接的解决办法
- mac os 10.10.4 上安装mysql5.6.26
- Nagios监控--Linux客户端(Use NRPE)
- 【 Quartz】使用 JobListener (任务监听器可实现) 我想在一个任务执行后在执行第二个任务怎么办呢
- 时序收敛:基本概念
- PS去黑头软管电商修图教程
- SVN使用详解
- Javascript 严格模式详解
- 稳定排序和不稳定排序(转载)
- SPFA算法模板
- MFC的多国语言界面的实现
- Hduoj1021【水题】
- Android仿微信头部下拉菜单
- C++构造函数对类成员变量初始化,使用初始化列表和构造函数内部直接赋值 的区别
- hdoj1022火车进站(栈)
- 《配置Naigos nrpe的客户端(LINUX、Windows)》
- LeetCode Find Minimum in Rotated Sorted Array
- 面试经典(1)---翻转字的顺序在一个句子
- oracle 执行 delete user$ 误删所有用户信息后的数据恢复流程
- 【树分治】 HDOJ 5314 Happy King