题目描述:
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_queque的详细用法,请戳(http://www.cnblogs.com/void/archive/2012/02/01/2335224.html)
代码:
1 #include<iostream> 2 #include<set> 3 #include<queue> 4 #include<vector> 5 using namespace std; 6 typedef long long ll; 7 const int basic[3]={2,3,5}; 8 int main() 9 { 10 priority_queue<ll,vector<ll>,greater<ll> >pq; 11 set<ll>q; 12 q.insert(1); 13 pq.push(1); 14 for(int i=1;;i++) 15 { 16 ll x=pq.top(); 17 pq.pop(); 18 if(i==1500) 19 { 20 cout<<"The 1500'th ugly number is "<<x<<".\n"; 21 break; 22 } 23 for(int j=0;j<3;j++) 24 { 25 ll x2=basic[j]*x; 26 if(!q.count(x2)) 27 { 28 q.insert(x2); 29 pq.push(x2); 30 } 31 } 32 } 33 return 0; 34 }