其他分享
首页 > 其他分享> > 【题解】蓝桥 - 第几个幸运数字

【题解】蓝桥 - 第几个幸运数字

作者:互联网

题目描述

X 星的国王有个怪癖,他只喜欢数字 3,5和 7

国王规定,游客的编号如果只含有因子:3,5,7,就可以获得一份奖品

我们来看前 10 个幸运数字是:

3 5 7 9 15 21 25 27 35 45

因而第 11 个幸运数字是: 49

小明领到了一个幸运数字 59084709587505,要求他准确地说出这是第几个幸运数字

请你帮小明计算一下,59084709587505 是第几个幸运数字。

输入输出

直接输出一个整数,表示 59084709587505 是第几个幸运数字

分析及代码实现

  • 建立一个luckNum的集合类,用于储存求出的幸运数
  • luckNum 的begin位初始化为1,利用for循环,每次从luckNum中抛出第一个元素(即最小的元素)
  • 判断抛出的元素是否等于我们需要的幸运数字:
  • 若为,则输出对应的 i - 1(这里是从1开始的,因此需要减去一个1)
  • 若不为,则分别与{3,5,7}相乘,并判断是否已经存在
  • 不存在则将求出的数insert() 进luckNum

C++代码实现

#include<iostream>
#include <cstdio>
#include<set>
using namespace std;

typedef long long LL;
const LL X = 59084709587505;	
const int coeff[3] = { 3,5,7 };
int main(){
	set<LL> luckNum;
	luckNum.insert(1);
	LL a;
	for (int i = 1;; i++)
	{
		//取出最小值(人为造的最小值)
        a = *luckNum.begin();
		//如果等于所求,输出
        if (a == X){
			cout << i - 1 << endl;
			break;
		}
        
        //去除当前最小
		luckNum.erase(*luckNum.begin());

        //将当前最小值分别于3,5,7相乘
		for (int j = 0; j < 3; j++)
            //若c乘积不存在,则将求出的数加入进luckNum
            if (!luckNum.count(a * coeff[j]))
                luckNum.insert(a * coeff[j]);
    }
	return 0;
}

//最终答案为1905

题目拓展

本题的思路类似紫书上的丑数问题

丑数问题

丑数是指不能被2,3,5以外的其他素数整除的数。

把丑数从小到大排列起来,结果如下:

1,2,3,4,5,6,8,9,10,12,15,…

求第1500个丑数。

分析

  • 从小到大生成各个丑数。最小的丑数是 1
  • 对于任意丑数:x,2x、3x和5x也都是丑数
  • 用一个优先队列/set保存所有已生成的丑数,每次取出最小的丑数,生成3个新的丑数
  • 需要注意的是,同一个丑数有多种生成方式,所以需要判断一个丑数是否已经生成过

C++代码实现

#include<iostream>
#include <cstdio>
#include<set>
using namespace std;

typedef long long LL;
const LL X = 1500;	
const int coeff[3] = { 2,3,5 };
int main(){
	set<LL> luckNum;
	luckNum.insert(1);
    for (int i = 1;; i++){
        LL a = *luckNum.begin();
		luckNum.erase(*luckNum.begin());
        if (i == X){
            cout << "the 1500th number is " << a << endl;
            break;
        }
        for (int j = 0; j < 3; j++)
            if (!luckNum.count(a * coeff[j]))
                luckNum.insert(a * coeff[j]);
    }
    return 0;
}

//答案为 859963392

标签:丑数,第几个,int,题解,LL,蓝桥,luckNum,幸运,include
来源: https://www.cnblogs.com/Yi-Shan/p/15840635.html