程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> uva136(優先隊列)

uva136(優先隊列)

編輯:C++入門知識

uva136(優先隊列)


題意:

不能被2,3,5以外的素數整除的數,稱為丑數;找出第1500個丑數;

 

思路:

用優先隊列和map判重;

如果x是丑數,則2x,3x,5x都是丑數;

不停的放出優先隊列;

並取出隊頭(最小的數)x;

要判斷這個數是否已經訪問過;

找到第1500個輸出;

 

 

#include
#include
#include
#include
#include
#define ll long long
using namespace std;

priority_queue , greater > q;
map m;
int main() {
	q.push(1);
	m[1] = 1;
	int count = 0;
	while(1) {
		ll t = q.top();
		q.pop();
		count++;
		if(count == 1500) {
			printf("The 1500'th ugly number is %lld.\n",t);
			break;
		}
		if(!m[t * 2]) {
			m[t * 2] = 1;
			q.push(t * 2);
		}
		if(!m[t * 3]) {
			m[t * 3] = 1;
			q.push(t * 3);
		}
		if(!m[t * 5]) {
			m[t * 5] = 1;
			q.push(t * 5);
		}
	}
	return 0;
}


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved