欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

蓝桥杯之第几个幸运数

发布时间:2023/12/15 编程问答 37 豆豆
生活随笔 收集整理的这篇文章主要介绍了 蓝桥杯之第几个幸运数 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

第几个幸运数
到x星球旅行的游客都被发给一个整数,作为游客编号。
x星的国王有个怪癖,他只喜欢数字3,5和7。
国王规定,游客的编号如果只含有因子:3,5,7,就可以获得一份奖品。
我们来看前10个幸运数字是:
3 5 7 9 15 21 25 27 35 45
因而第11个幸运数字是:49
小明领到了一个幸运数字 59084709587505,他去领奖的时候,人家要求他准确地说出这是第几个幸运数字,否则领不到奖品。
请你帮小明计算一下,59084709587505是第几个幸运数字。
需要提交的是一个整数,请不要填写任何多余内容。
思路:我的思路是暴力打出所有范围内的幸运数,去重后,二分查找幸运数字是第几个。看到网上有人是将已经找出的幸运数字放入优先队列中,然后每次出来的就是最小的数字,这样的话,就保证了数据的有序性,这个做法比较好。
答案为:1905
暴力代码如下:

#include<bits/stdc++.h> #define ll long long #define inf 1e14 using namespace std;inline ll qsm(ll x,int y) {ll ans=1;while(y){if(y&1) ans=ans*x;y>>=1;x*=x;}return ans; } int main() {vector<ll> p;for(int i=0;;i++){if(qsm(3ll,i)>inf) break;for(int j=0;;j++){if(qsm(5ll,j)>inf) break;if(qsm(3ll,i)*qsm(5ll,j)>inf) break;for(int k=0;;k++){if(qsm(7ll,k)>inf) break;if(qsm(3ll,i)*qsm(5ll,j)>inf) break;if(qsm(3ll,i)*qsm(5ll,j)*qsm(7ll,k)>inf) break;p.push_back((ll)qsm(3ll,i)*qsm(5ll,j)*qsm(7ll,k));}}}sort(p.begin(),p.end());p.erase(unique(p.begin(),p.end()),p.end());p.erase(p.begin());//第一个为1,1不是幸运数,去掉。int pos=lower_bound(p.begin(),p.end(),59084709587505)-p.begin();cout<<pos+1<<endl;//数组下标是从0开始的,因此要+1.return 0; }

努力加油a啊,(o)/~

总结

以上是生活随笔为你收集整理的蓝桥杯之第几个幸运数的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。