poj1338 Ugly Numbers
2015-12-03 20:37
411 查看
题意:
定义一个丑数:只能由2, 3, 5作为因子组成;
题意就是找第n个丑数;
特别的, 1也是一个丑数;
理解:
这题是个面试题, 在校赛上见到了, 以前没做过;
之后看着题目数据很小, 而且受yick师兄引导,就打表过了;
今天看了正确的题解,于是就记录下来。
很明显的可以看出,后面的丑数一定是有前面的丑数得来;
因此,先自己算出前面几个已知数;
这里是9个;
num[n + 10] = {0, 1, 2, 3, 4, 5, 6, 8, 9, 10};
然后记t2, t3, t5;
t2 表示某数 * 2 大于 当前数的前一个数 的下标;
t3 表示某数 * 3 大于 当前数的前一个数 的下标;
t5 表示某数 * 5 大于 当前数的前一个数 的下标;
然后再对此三个数取小:num[t2] * 2, num[t3] * 3, num[t5] * 5;
那么这个数就是要求的那个数;
依次如此就能求出第n个了;
代码如下:
定义一个丑数:只能由2, 3, 5作为因子组成;
题意就是找第n个丑数;
特别的, 1也是一个丑数;
理解:
这题是个面试题, 在校赛上见到了, 以前没做过;
之后看着题目数据很小, 而且受yick师兄引导,就打表过了;
今天看了正确的题解,于是就记录下来。
很明显的可以看出,后面的丑数一定是有前面的丑数得来;
因此,先自己算出前面几个已知数;
这里是9个;
num[n + 10] = {0, 1, 2, 3, 4, 5, 6, 8, 9, 10};
然后记t2, t3, t5;
t2 表示某数 * 2 大于 当前数的前一个数 的下标;
t3 表示某数 * 3 大于 当前数的前一个数 的下标;
t5 表示某数 * 5 大于 当前数的前一个数 的下标;
然后再对此三个数取小:num[t2] * 2, num[t3] * 3, num[t5] * 5;
那么这个数就是要求的那个数;
依次如此就能求出第n个了;
代码如下:
#include <cstdio> #include <algorithm> using namespace std; #define ll long long int main() { int num[1501] = {0, 1, 2, 3, 4, 5, 6, 8, 9, 10}; int t2 = 0, t3 = 0, t5 = 0; for (int i = 10; i < 1501; ++i) { while (num[t2] * 2 <= num[i - 1]) ++t2; while (num[t3] * 3 <= num[i - 1]) ++t3; while (num[t5] * 5 <= num[i - 1]) ++t5; num[i] = min(num[t2] * 2, min(num[t3] * 3, num[t5] * 5)); } int n; while (~scanf("%d", &n) && n) { printf("%d\n", num ); } return 0; }
相关文章推荐
- 一个关于if else容易迷惑的问题
- 一道sql面试题附答案
- C# 超高面试题收集整理
- 人人网javascript面试题 可以提前实现下
- PHP中设置一个严格30分钟过期Session面试题的4种答案
- 据说是雅虎的一份PHP面试题附答案
- php牛逼的面试题分享
- 一套比较完整的javascript面试题(部分答案)
- 小米公司JavaScript面试题
- 超级全面的PHP面试题整理集合第1/2页
- 5个实用的shell脚本面试题和答案
- PHP经典面试题集锦
- 8个PHP数组面试题
- PHP中提问频率最高的11个面试题和答案
- 用PHP解决的一个栈的面试题
- PHP面试题之文件目录操作
- 几道坑人的PHP面试题 试试看看你会不会也中招
- 5个JavaScript经典面试题
- 一不小心就做错的JS闭包面试题
- Java高级面试题小结