把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。

习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

输入:

输入包括一个整数N(1<=N<=1500)。

输出:

可能有多组测试数据,对于每组数据,

输出第N个丑数。

样例输入:

3

样例输出:

3

【解题思路】本题最直观的想法就是从1开始遍历,然后判断每一个数是否为丑数,但这样肯定是一种非常耗时间的做法,不可取。那么我们是否可用从丑数的特点出发呢,从另一个角度来思考问题,我们可以用2
3 5这三个数相乘来组成丑数,我们唯一需要确保的就是我们组成的丑数是按从小到大的关系出现的。我们可以想象一个丑数的出现是前面某一个丑数乘以2 /3 /5的结果,所以我们可以维护三个index,分别对应是2 3 5下一个应该相乘的数,然后依次去这三个数的最小值作为下一个丑数,并更新三个index。如此继续迭代。

AC  code:

#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std; void build(vector<int> &vec)
{
int t2=1,t3=1,t5=1;
int cnt=1;
while(cnt<=1501)
{
int a=vec[t2]*2,b=vec[t3]*3,c=vec[t5]*5;
int mine=min(min(a,b),c);
vec.push_back(mine);
while(a<=mine){++t2;a=vec[t2]*2;}
while(b<=mine){++t3;b=vec[t3]*3;}
while(c<=mine){++t5;c=vec[t5]*5;}
++cnt;
}
} int main()
{
int n;
vector<int> vec;
vec.push_back(0);
vec.push_back(1);
build(vec);
while(scanf("%d",&n)!=EOF)
{
printf("%d\n",vec[n]);
}
return 0;
}
/**************************************************************
Problem: 1214
User: huo_yao
Language: C++
Result: Accepted
Time:10 ms
Memory:1024 kb
****************************************************************/

题目链接:http://ac.jobdu.com/problem.php?pid=1214

九度-剑指Offer习题全套答案下载:http://download.csdn.net/detail/huoyaotl123/8276299

最新文章

  1. jQuery版AJAX简易封装
  2. [LeetCode] Best Time to Buy and Sell Stock IV 买卖股票的最佳时间之四
  3. leetcode 149. Max Points on a Line --------- java
  4. photoshopCS4换中文
  5. Java strictfp关键字
  6. Python 迭代器、生成器、递归、正则表达式 (四)
  7. PHPSingleton模式的例子
  8. 腾讯Java程序员第二轮面试11个问题,你会几个?
  9. 微信公众平台开发,图文回复、access_token生成调用、以及微信SDK的实现(2)
  10. CentOS6.4下安装Nginx1.12.2
  11. 《剑指offer》扑克牌顺子
  12. 有几个PAT
  13. Zabbix监控Nginx性能状态
  14. Linux使用命令修改默认启动为图形或字符界面
  15. 如何用jquery实现实时监控浏览器宽度
  16. JRE vs OpenJDK vs Oracle JDK
  17. netty4初步使用
  18. Git 使用篇二:小组协作开发
  19. 转00600异常解决方案:ORA-00600: 内部错误代码, 参数: [19004], [], [], [], [], []
  20. lintcode-120-单词接龙

热门文章

  1. java 日志的数据脱敏
  2. 使用scrapy-redis 搭建分布式爬虫环境
  3. Card Game for Three
  4. 吴裕雄--天生自然Numpy库学习笔记:NumPy IO
  5. 杭电 2013 猴子吃桃 递归解法&amp;循环解法
  6. 在tomcat启动时解析xml文件,获取特定标签的属性值,并将属性值设置到静态变量里
  7. 学习笔记(7)- 基于LSTM的对话模型
  8. Fleck WebSocket使用
  9. Solidity顺序编程
  10. java判断字符串是否是数字