AT4276 题解

小学生又来写题解啦!

容易想到,范围内七五三数不会很多,因此尝试暴力搜索,即深搜

参数除了当前的数外,还有三个布尔类型的变量分别表示三、五、七有无出现。

每次都判断是否为七五三数即可,超出范围才跳出。

对了,还有一个魔鬼细节,在代码中会提到。

满分代码:

#include <iostream>
#include <cstdio>
using namespace std;
int cnt, n;
void dfs(long long x, bool use3, bool use5, bool use7)
//魔鬼细节来啦!
//看到上面的 long long 没有?
{
	if (x > n) return; 
	if (x <= n && use3 && use5 && use7) cnt++;  //判断一下,注意此时不用跳出。 
	dfs(x * 10 + 3, true, use5, use7); //补个 3。 
	dfs(x * 10 + 5, use3, true, use7); //补个 5。 
	dfs(x * 10 + 7, use3, use5, true); //补个 7。 
}
int main()
{
	scanf("%d", &n);
	dfs(0, false, false, false);
	printf("%d", cnt);
	return 0;
}

首发:2022-01-28 14:38:54

posted @ 2022-08-24 23:59  liangbowen  阅读(7)  评论(0编辑  收藏  举报