Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, ...

shows the first 11 ugly numbers. By convention, 1 is included. Write a program to find and print the 1500’th ugly number.

Input There is no input to this program.

Output Output should consist of a single line as shown below, with ‘<number>’

replaced by the number computed. Sample Output The 1500'th ugly number is <number>.

分析:

第一种方法:遍历每个数,判断是否为ugly,直到第1500个ugly为止(简单粗暴,没有效率可言,runtime 19s)

#include<iostream>
#include<algorithm>
#include<stdio.h>
using namespace std;
bool isugly(int n)
{
while(n>)
{
if(n%==)
n/=;
else if(n%==)
n/=;
else if(n%==)
n/=;
else
return ;
}
return ;
}
int main()
{
int cnt=;
int num=;
while(cnt<)
{
if(isugly(num))
cnt++;
num++;
}
cout<<num-<<endl;
return ;
}

第二种方法:利用STL优先队列从小到大生成各个ugly number。最小的丑数是1,而对于任意丑数x,2x,3x和5x也都是丑数。注意丑数判重。

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<queue>
#include<set>
using namespace std;
typedef long long LL;
int f[]={,,};
int main()
{
priority_queue<LL,vector<LL>,greater<LL> > qq;
set<LL> s;
qq.push();
s.insert();
for(int i=;;i++)
{
LL x=qq.top();
qq.pop(); if(i==)
{
cout << "The 1500'th ugly number is " << x << ".\n";
break;
}
for(int j=;j<;j++)
{
LL x2=x*f[j];
if(!s.count(x2))
{
s.insert(x2);
qq.push(x2);
}
}
}
// cout<<"The 1500'th ugly number is 859963392."<<endl;
return ;
}

UVA - 136 Ugly Numbers(丑数,STL优先队列+set)的更多相关文章

  1. UVA.136 Ugly Numbers (优先队列)

    UVA.136 Ugly Numbers (优先队列) 题意分析 如果一个数字是2,3,5的倍数,那么他就叫做丑数,规定1也是丑数,现在求解第1500个丑数是多少. 既然某数字2,3,5倍均是丑数,且 ...

  2. UVa 136 Ugly Numbers【优先队列】

    题意:给出丑数的定义,不能被除2,3,5以外的素数整除的的数称为丑数. 和杭电的那一题丑数一样--这里学的紫书上的用优先队列来做. 用已知的丑数去生成新的丑数,利用优先队列的能够每次取出当前最小的丑数 ...

  3. UVA - 136 Ugly Numbers (有关set使用的一道题)

    Ugly numbers are numbers whose only prime factors are 2, 3 or 5. The sequence1, 2, 3, 4, 5, 6, 8, 9, ...

  4. UVa 136 - Ugly Numbers

    题目大意:只有素因子2,3,5的数叫做丑数.输出第1500个丑数即可. 这个...好吧,直接输出就是了.自己写一个小程序先计算一下,这就是黑盒测试的好处啊,“我们的目标是解决问题,而不是为了写程序而写 ...

  5. lintcode :Ugly Numbers 丑数

    题目 丑数 设计一个算法,找出只含素因子3,5,7 的第 k 大的数. 符合条件的数如:3,5,7,9,15...... 样例 如果k=4, 返回 9 挑战 要求时间复杂度为O(nlogn)或者O(n ...

  6. 136 Ugly Numbers(priority_queue+逆向求解要求数)

    题目链接: https://cn.vjudge.net/problem/UVA-136 /*问题 输出第1500个丑数,丑数的定义是不能被2,3,5以外的其他素数整除的数 解题思路 直接硬暴力先试一下 ...

  7. Humble Numbers(丑数) 超详解!

    给定一个素数集合 S = { p[1],p[2],...,p[k] },大于 1 且素因子都属于 S 的数我们成为丑数(Humble Numbers or Ugly Numbers),记第 n 大的丑 ...

  8. hdu1058丑数(优先队列、暴力打表)

    hdu1058 题意:当一个数只有2.3.5.7这四种质因数时(也可以一种都没有或只有其中几种),这个数就是丑数,输出第 n 个丑数是多少: 其实并没有发现hdu把这道题放在 dp 专题里的意图,我的 ...

  9. Ugly number丑数2,超级丑数

    [抄题]: [思维问题]: [一句话思路]:Long.valueOf(2)转换为long型再做 [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入): [画图 ...

随机推荐

  1. cmd激活win10

    自己动手,KMS激活win10 2016 长期服务版.步骤如下:命令提示符(管理员),依次输入以下3条命令 slmgr /ipk DCPHK-NFMTC-H88MJ-PFHPY-QJ4BJslmgr ...

  2. poi excel 常用api

    http://www.cnblogs.com/huajiezh/p/5467821.html

  3. C++ 编译器

    C++编译器 当我们定义了一个类的时候, C++编译器在默认的情况下会为我们添加默认的构造方法, 拷贝构造方法, 析构函数和=运算符 在第一次创建对象的语句中如: MyString myString ...

  4. Observer(观察者)设计模式[转]

    Observer设计模式中主要包括如下两类对象: Subject:监视对象,它往往包含着其他对象所感兴趣的内容.在本范例中,热水器就是一个监视对象,它包含的其他对象所感兴趣的内容,就是tempratu ...

  5. 针对在webview模式中,小米魅族手机不支持html5原生video的control的解决办法![原创]

    其实,解决办法就是,重新写个control控制功能,.同样用流行的video.js可以实现 第一步就是增加个播放的图片..要不然没有按钮多难看! <div class="videoDi ...

  6. Razor语句(VIew)小知识

    1.可以写后台语句 例如:

  7. C# 获取电脑硬盘剩余空间

    获取本地硬盘的所有剩余空间: 主要应用到System.IO类库的:Driveinfo.Directory,将model转换成json需要用到Newtonsoft.Json.JsonConvert.Se ...

  8. hibernate事务管理 (jdbc jta)

    hibernate的两种事务管理jdbc 和jta方式.下边说说两者的区别一.说明一下jdbc和jta方式事务管理的区别:JDBC事务由Connnection管理,也就是说,事务管理实际上是在JDBC ...

  9. 2.浅析Hadoop之YARN

    YARN也是主从架构,主节点是ResourceManager,从节点是NodeManager,是一种资源分配及任务管理的组件 针对每个任务还有ApplicationMaster应用管理者和Contai ...

  10. SpringBoot ------ 使用AOP处理请求

    一.AOP统一处理请求日志 1.spring的两大核心:AOP ,  IOC 2.面向对象OOP关注的是将需求功能垂直,划分为不同的,并且相对独立的,   会封装成良好的类,并且类有属于自己的行为. ...