題目要求
醜數就是這個數的質因子只有2,3,5,7這四個,除此之外不再含有其它
別的質因子。
注意1也被認為是醜數.醜數的前20個為
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, 25, 27, … ;
input
每行輸入乙個n,1 <= n <= 5842,n為0時輸入結束.
output
輸出相應的第n個醜數.
sample input
raw123
4111213
2122
23100
1000
5842
0sample output
raw123
4121415
2830
32450
385875
2000000000
這道題在以前,只會常規遍歷尋找數字是否整除等於0時,總是顯示超時。最近看到了vector,set,map以及優先佇列又想起來了。
第一遍做的時候很單純,醜數是2,3,5,7的倍數,只要從最小的醜數1開始,用乙個優先佇列保持所有已生成的醜數,每次取出最小的那個數字讓它乘上2,3,5,7自然可以得到下乙個醜數,因為是優先佇列,可以使它從小到大直接排列,要注意的使這樣做會出現重複數字,所以要記得去重。最後只要知道所給數字,即可知道該位置上的醜數了。
完整**
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace std;
typedef
long
long ll;
const
int num[4]
=;intmain()
for(
int j=
0;j<
4;j++)}
}while
(cin>>t)
return0;
}
後來問學長關於佇列的相關知識,他說我這做複雜了。。。
可以利用尋找最優解的思想,第乙個確定ans[1]=1,現在有2,3,5,7四種方式指向ans[1],這裡肯定會選擇2。以此類推可以確定第二個,第三個。。。。
這裡貼部分**
inline
void
init()
}
醜數 優先佇列 詳細解答
題目 醜數是一些因子只有2,3,5的數。數列1,2,3,4,5,6,8,9,10,12,15 寫出了從小到大的前11個醜數,1屬於醜數。現在請你編寫程式,找出第1500個醜數是什麼。輸出 the 1500 th ugly number is 為你找到的第1500個醜數 注意 是你找到的數,輸出中沒有...
1026優先佇列
include include using namespace std int n,m,a 2 4 struct node struct labyrinth maze 100 100 int bfs else maze n 1 m 1 c x q.push now while q.empty maz...
Uva136 醜數 優先佇列
找出第1500個素因子只能有2或3或5的數。懵逼了吧,並不是素因子篩,用2,3,5去篩並不能得到滿足醜數要求的數,例如14就篩不掉。優先佇列每次取乙個最小的數x,2x,3x,5x,都是醜數,但是每次要判斷是否有重數 set 取1500,每次都是取出最小的數,取1500次之後就是第1500個數。inc...