蓝桥杯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;
} 
posted @   DawnTraveler  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示