nefuoj574醜數
只有質數2,3,5,7這幾個作為因子的數叫做醜數,比如前19個醜數是1,2,3,4,5,6,7,8,9,10,12,14,15,16,18,20,21,24和25.
求第n小的醜數,其1中<=n<=5842
模擬blash數集:
(法1)維護4個單調佇列,分別儲存x
xx生成的2x,
3x,5
x,7x
2x,3x,5x,7x
2x,3x,
5x,7
x的結果
#include
using
namespace std;
const
int maxn=
5842
;const
int inf=
2147483647
;queue <
int> q1,q2,q3,q4;
int p1,p2,p3,p4;
//q1...q4分別儲存x*2,x*3,x*5,x*7的拓展結果
int a[maxn+10]
;int
getmin
(int a1,
int a2,
int a3,
int a4)
int main (
)int n;
while
(cin>>n && n)
cout<
}
(法2)只維護1個單調陣列,同時記錄4種生成法則對應的下標
#include
using
namespace std;
const
int maxn=
5900
;const
int inf=
2147483647
;const
int pri[6]
=;int pos[6]
=;//p[i]±íê¾µúi¸ööêêýéïò»´î²îóëôëëãµäî»öã
int a[maxn+10]
;int main ()}
a[i]
=minn;
for(
int j=
1;j<=
4;j++
)//pos[p]++;
//cout<}
int n;
while
(cin>>n && n)
cout<
}
#include
#define min4(a,b,c,d) min(min(a,b),min(c,d))
using
namespace std;
int n,p2,p3,p5,p7,a[
5850];
//定義min4(a,b,c,d),找四個數中的最小值
intmain()
while
(cin>>n&&n)
printf
("%d\n"
,a[n]);
return0;
}————————————————
86081513
醜數 優先佇列 詳細解答
題目 醜數是一些因子只有2,3,5的數。數列1,2,3,4,5,6,8,9,10,12,15 寫出了從小到大的前11個醜數,1屬於醜數。現在請你編寫程式,找出第1500個醜數是什麼。輸出 the 1500 th ugly number is 為你找到的第1500個醜數 注意 是你找到的數,輸出中沒有...
Uva136 醜數 優先佇列
找出第1500個素因子只能有2或3或5的數。懵逼了吧,並不是素因子篩,用2,3,5去篩並不能得到滿足醜數要求的數,例如14就篩不掉。優先佇列每次取乙個最小的數x,2x,3x,5x,都是醜數,但是每次要判斷是否有重數 set 取1500,每次都是取出最小的數,取1500次之後就是第1500個數。inc...
lintcode 4 醜數 II(優先佇列)
設計乙個演算法,找出只含素因子2,3,5的第 n 大的數。符合條件的數如 1,2,3,4,5,6,8,9,10,12.看到題的第乙個想法一直向下列舉 直到找到第n個數 我的思路是 每乙個醜數都是由乙個醜數乘2乘3乘5得來的,可以把第乙個醜數也就是1放進優先佇列中,然後進行n次操作每次取出隊頭然後把隊...