蓝桥杯2018年A组-试题D-第几个幸运数
0.题目
1.题解
1.1 DFS搜索(失败)
思路
思路很简单,但是还有可能遇到重复的情况,比如像3->35->353 和 5->53->533 是重复的
但是递归过深,导致超时.
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
int ans = 0;
set<ll> s;
void DFS(ll num){
if(num > 3579152125273545) return;
s.insert(num);
DFS(num * 3);
DFS(num * 5);
DFS(num * 7);
}
int main(){
DFS(1);
for(auto num: s){
cout << num << endl;
}
cout << s.size() - 1;
}
1.2 暴力枚举
思路
这里我们获取相应的小于num的数的顺序并不重要(因为我们只需要获取总个数)
这里其实就是 3^i * 5^j * 7^k 即为组成结构
但要注意,由于这里包括了 i=0,j=0,k=0的情况,包含了1在里面,需要减掉即可
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll num = 59084709587505;
int ans = 0;
int main(){
for(int i = 0; pow(3, i) < num; i++){
for(int j = 0; pow(5, j) < num; j++){
if(pow(3, i) * pow(5, j) > num) break;
for(int k = 0; pow(7, k) < num; k++){
if(pow(3, i) * pow(5, j) * pow(7, k) <= num)
ans++;
else break;
}
}
}
cout << ans - 1;
return 0;
}
分类:
蓝桥杯-C++A组
, 数据结构与算法 / 枚举
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了