本文主要是介绍第九届蓝桥杯省赛C++A组 第几个幸运数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
标题:第几个幸运数
到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;
}
这篇关于第九届蓝桥杯省赛C++A组 第几个幸运数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!