这个题的题目要求就是找一个abcd。然后找出e 再去判断abcde是否是零。可以替换,这个题让找,不是零的都多少个,这样就是直接暴力,枚举1到1万,然后暴力5个循环,如果当前数位的数不等于j 就检查一遍,然后,最后的时候注意,每一个数位不能相等,然后你变换一下位置,再检查一遍就可以了。
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;
const int maxn=600000+200;
int m[15][15];
int x1,x2,x3,x4,x5,ans;
bool judge(int a,int b,int c,int d,int e)
{
int xx = 0;
xx = m[0][a];
xx = m[xx][b];
xx = m[xx][c];
xx = m[xx][d];
xx = m[xx][e];
return xx;
}
int main()
{
for(int i = 0; i <= 9; i++)
for(int j = 0; j <= 9; j++)
{
cin>>m[i][j];
}
ans = 0;
for(int i = 0; i <= 9999; i++)
{
x1 = i / 1000;
x2 = i / 100 % 10;
x3 = i / 10 % 10;
x4 = i % 10;
x5 = m[0][x1];
x5 = m[x5][x2];
x5 = m[x5][x3];
x5 = m[x5][x4];
int flag = 1;
//cout<<x1<<" "<<x2<<" "<<x3<<" "<<x4<<endl;
for(int j = 0; j <= 9; j++)
{
if(x1 != j)
{
if(!judge(j,x2,x3,x4,x5))
{
flag = 0;
}
}
}
for(int j = 0; j <= 9; j++)
{
if(x2 != j)
{
if(!judge(x1,j,x3,x4,x5))
{
flag = 0;
}
}
}
for(int j = 0; j <= 9; j++)
{
if(x3 != j)
{
if(!judge(x1,x2,j,x4,x5))
{
flag = 0;
}
}
}
for(int j = 0 ; j <= 9; j++)
{
if(x4 != j)
{
if(!judge(x1,x2,x3,j,x5))
{
flag = 0;
}
}
}
for(int j = 0; j <= 9; j++)
{
if(x5 != j)
{
if(!judge(x1,x2,x3,x4,j))
{
flag = 0;
}
}
}
if(x1 != x2 && !judge(x2,x1,x3,x4,x5))
flag = 0;
if(x2 != x3 && !judge(x1,x3,x2,x4,x5))
flag = 0;
if(x3 != x4 && !judge(x1,x2,x4,x3,x5))
flag = 0;
if(x4 != x5 && !judge(x1,x2,x3,x5,x4))
flag = 0;
if(!flag)
ans++;
}
printf("%d\n",ans);
}