这个题的题目要求就是找一个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); }