第几个幸运数
到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;
}