小学生又来写题解啦!
容易想到,范围内七五三数不会很多,因此尝试暴力搜索,即深搜。
参数除了当前的数外,还有三个布尔类型的变量分别表示三、五、七有无出现。
每次都判断是否为七五三数即可,超出范围才跳出。
对了,还有一个魔鬼细节,在代码中会提到。
满分代码:
#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
标签:题解,AT4276,long,bool,include,七五 From: https://www.cnblogs.com/liangbowen/p/16622753.html