UVA-136 Ugly Numbers (map容器+优先队列)
来源:互联网 发布:淘宝店如何找货源 编辑:程序博客网 时间:2024/05/17 01:13
题目链接:https://cn.vjudge.net/problem/UVA-136
题意:如果一个数的因子只由2,3,5,组成,则这个数被称为丑数。按照惯例,1也被称为丑数。求第1500个丑数并·输出。
这道题没有数据输入。
思路:题意很简单,但一不小心就会超时。。。。。(但也有收获)。
为了节省时间,我们可以用优先队列来做。但你用什么来标记一个数出现过了呢。数组吗,存不下,自己试一下就知道了。
所以呢,可以用map映照容器来实现这一功能,而且默认为0(只起标记作用)。
代码如下:.
#include<stdio.h>#include<vector>#include<map>#include<queue>#include<algorithm>using namespace std;typedef long long LL;int a[4]= {2,3,5};int main(){ priority_queue<LL,vector<LL>,greater<LL> >pq;//从小到大排序 map<LL,int>s; s[1]=1; pq.push(1); int sum=1; LL ans; while(sum<1500) { ans=pq.top(); pq.pop(); for(int i=0; i<3; i++) { if(s[ans*a[i]]==0) { s[ans*a[i]]=1; pq.push(ans*a[i]); //自动按照要求排序 } } sum++; } printf("The 1500'th ugly number is %d.\n",pq.top()); return 0;}
懒人代码:
#include<stdio.h>int main(){ /* long long int i=0; long long int sum=0; while(1) { i++; int ans=i; while(ans%2==0) ans/=2; while(ans%3==0) ans/=3; while(ans%5==0) ans/=5; if(ans==1) sum++; if(sum==1500) { printf("%d\n",i); //虽然超时,但出现了后面的正确结果 break; } }*/ printf("The 1500'th ugly number is %d.\n",859963392);//直接输出结果,多省事,哈哈哈~~~ return 0;}
阅读全文
0 0
- UVA-136 Ugly Numbers (map容器+优先队列)
- UVa 136 Ugly Numbers(优先队列)
- UVA - 136 Ugly Numbers set+优先队列
- uva 136(Ugly Numbers, 优先队列基础)
- Uva 136 Ugly Numbers 优先队列
- Ugly Numbers(UVa 136)优先队列
- UVA.136 Ugly Numbers (优先队列)
- UVA 136 - Ugly Numbers【巧用优先队列】
- UVa - 136 - Ugly Numbers(STL - 优先队列priority_queue)
- UVA 136 Ugly Numbers(队列)
- UVA 136 Ugly Number(优先队列)
- 例题5-7 UVA 136 Ugly Numbers丑数(set+优先队列)
- uvaoj 136 Ugly Numbers 优先队列使用
- poj - 1338 - Ugly Numbers(优先队列)
- poj1338 Ugly Numbers(set + 优先队列)
- UVa136(Ugly Numbers)优先队列
- poj Ugly Numbers(优先队列)
- UVa 136 - Ugly Numbers
- 生产者和消费者多线程--线程间通信
- HDU5000 Clone(计数dp)
- Unity3d基础入门之常用API的总结与解析
- js时间格式化,日期加减天
- 重新给mysql设置登陆密码(包括安装中没有设置登陆密码的情况)
- UVA-136 Ugly Numbers (map容器+优先队列)
- L1027
- 高精度模版:加,减,乘,带余除法
- Vue和React的区别
- PHP-身份证号码验证
- play框架初探索
- 知名三方库 RNCachingURLProtocol 之清除缓存方案
- 阿里巴巴Java开发手册学习-OOP规约
- Spark使用Java读取mysql数据和保存数据到mysql