【Jason's_ACM_解题报告】Ugly Numbers

来源:互联网 发布:淘宝开店拍照总是失败 编辑:程序博客网 时间:2024/06/05 16:36

Ugly Numbers 

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 and Output

There is no input to this program. 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>.


此题有多种解决方案,本题使用优先级队列实现。priority_queue< int,vector<int>,cmp >或者将cmp改为greater<int>,cmp函数是优先级队列的比较函数,优先级高的先出队,也就是说,假如传给cmp两个参数x、y,当cmp返回值为true时x的优先级低于y的优先级。比如,若函数为return x>y;则代表,数大的优先级小;此处greater是一个模板函数,运行时,自动传给greater两个参数x、y,若x>y返回true,否则返回false。



附代码如下:
#include<set>#include<vector>#include<queue> #include<cstdio>using namespace std;#define LL long long intconst int num[3]={2,3,5};int main(){priority_queue< LL , vector<LL> , greater<LL> > pq;set<LL> s;s.insert(1);pq.push(1);for(int i=1;;i++){LL x=pq.top();if(i==1500){printf("The 1500'th ugly number is %d.\n",x);break;}pq.pop();for(int j=0;j<3;j++){if(!s.count(x*num[j])){pq.push(x*num[j]);s.insert(x*num[j]);}}}return 0;}

0 0
原创粉丝点击