算法1 dfs
C++ 代码
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
const int N = 110;
int a[N];
bool st[20240000];
int res;
int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool check(int date)
{
int m=date/100%100;
int d=date%100;
if(m<1||m>12) return false;
if(m==2)
{
if(d<1||d>28) return false;
}
else
{
if(d<1||d>mon[m]) return false;
}
return true;
}
void dfs(int i,int u,int date)
{
if(i==101) return ;
if(u==9)
{
if(!st[date]&&check(date))
{
st[date]=true;
res++;
return ;
}
else
{
return;
}
}
if((u==1&&a[i]==2)||(u==2&&a[i]==0)||(u==3&&a[i]==2)||(u==4&&a[i]==3)
||(u==5)||(u==6)||(u==7)||(u==8))
{
dfs(i+1,u+1,date*10+a[i]);
}
dfs(i+1,u,date);
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
for(int i=1;i<=100;i++)
{
cin>>a[i];
}
dfs(1,1,0);
cout<<res<<endl;
return 0;
}
暴力循环
#include "bits/stdc++.h"
using namespace std;
int res;
int a[100]={5,6,8,6,9,1,6,1,2,4,9,1,9,8,2,3,6,4,7,7,5,9,5,0,3,8,7,5,8,1,5,8,6,1,8,3,0,3,7,9,2,
7,0,5,8,8,5,7,0,9,9,1,9,4,4,6,8,6,3,3,8,5,1,6,3,4,6,7,0,7,8,2,7,6,8,9,5,6,5,6,1,4,
0,1,0,0,9,4,8,0,9,1,2,8,5,0,2,5,3,3};
int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main() {
for(int i=1;i<=12;i++)
{
for(int j=1;j<=mon[i];j++)
{
int date[9]={2,0,2,3,i/10,i%10,j/10,j%10};
int k=0;
for(int u=0;u<100;u++)
{
if(a[u]==date[k])
{
k++;
}
if(k==8)
{
res++;
break;//及时break,不然会多枚举
}
}
}
}
cout<<res<<endl;
return 0;
}