第几个幸运数(第九届蓝桥杯省赛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是第几个幸运数字。需要提交的是一个整数,请不要填写任何多余内容。

做这题时我还不是很熟悉stl,走了很多弯路是真的菜,这里有一个博主总结的set容器的用法。

(https://www.cnblogs.com/zyxStar/p/4542835.html)

思路 取出队头,当对头<=幸运数字时,依次用对头*3 *5 *7 加入队尾,最后扫一遍set即可。set里元素是有序不重复的(真香)。

上代码、、、、、、、、、、、、、、、、、

#include<iostream>
#include<set>
#define LL long long
using namespace std;
LL maxs=59084709587505;
set<LL>q;
int main()
{
    q.insert(3);
    q.insert(5);
    q.insert(7);
    set<LL>::iterator it;
    it=q.begin();
    LL mid;
    while(*it<=maxs)
    {
        mid=*it;
        q.insert(mid*3);
        q.insert(mid*5);
        q.insert(mid*7);
        it++;
    }
    int num=0;
    for(it=q.begin();it!=q.end();it++)
    {
        if(*it<=maxs)num++;
    }
    cout<<num;
    return 0;
}
发布了10 篇原创文章 · 获赞 0 · 访问量 181

猜你喜欢

转载自blog.csdn.net/weixin_44460602/article/details/104757790