第十届蓝桥杯省赛C++B组 数的分解
思路:
可以直接暴力,三重循环。
也可用dfs
代码:
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cmath>
#define ll long long
using namespace std;
int ans=0;
int a[3]= {0};
int vis[2020]= {0};//标记
bool existtf(int n) {//判断是否含有2,4
while(n>0) {
if(n%10==2||n%10==4)
return false;
n=n/10;
}
return true;
}
void dfs(int n) {
if(n==3) {
if(a[0]+a[1]+a[2]==2019&&a[0]!=a[1]&&a[1]!=a[2]&&a[0]!=a[2])
ans++;
return;//只要n==3,就要return,不是满足和为2019才return
}
for(int i=1; i<=2019; i++) {
if(existtf(i)) {
a[n]=i;
vis[i]=1;
dfs(n+1);
vis[i]=0;
}
}
}
int main() {
dfs(0);
cout<<ans/6<<endl;//每种情况重复3!次 ,需要除以6
return 0;
}