第九屆藍橋杯省賽C++A組 第幾個幸運數
阿新 • • 發佈:2018-12-07
標題:第幾個幸運數
到x星球旅行的遊客都被髮給一個整數,作為遊客編號。
x星的國王有個怪癖,他只喜歡數字3,5和7。
國王規定,遊客的編號如果只含有因子:3,5,7,就可以獲得一份獎品。
我們來看前10個幸運數字是:
3 5 7 9 15 21 25 27 35 45
因而第11個幸運數字是:49
小明領到了一個幸運數字 59084709587505,他去領獎的時候,人家要求他準確地說出這是第幾個幸運數字,否則領不到獎品。
請你幫小明計算一下,59084709587505是第幾個幸運數字。
需要提交的是一個整數,請不要填寫任何多餘內容。
答案:1905
思路:用1作為初始值,先將1分別乘上3、5、7得到3、5、7,再將這三個數分別乘上3、5、7得到9、15、21;15、25、35;21、35、49,以此類推。需要注意的是,為了得到59084709587505的正確序號,我們得保證前面依次乘出來的數要從小到大排序,並且不能重複,於是就要用的priority_queue和set。
程式碼:
#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> #include<string> #include<vector> #include<queue> #include<map> #include<set> using namespace std; priority_queue<long long,vector<long long>,greater<long long> > q; set<long long> s; int main() { int ans=-1; q.push(1); s.insert(1); while(1) { long long n=q.top(); q.pop(); ans++; if(n==59084709587505) break; for(int i=3;i<=7;i+=2) { long long t=n*i; if(!s.count(t)) { q.push(t); s.insert(t); } } } cout<<ans<<endl; return 0; }