2020.12.28暴力三阶幻方
题目描述
三阶幻方又被称作九宫格(对角线、横、竖和都为15,中间数为5)
4 9 2
3 5 7
8 1 6
所有的三阶幻方,都可以通过这样一个九宫格进行若干镜像和旋转操作之后得到。现在小明准备将一个三阶幻方(不一定是上图中的那个)中的一些数抹掉,你呢,需要写一个程序
输入格式
输入仅包含单组测试数据。
每组测试数据为一个3*3的矩阵,其中为0的部分表示被小明抹去的部分。
对于100%的数据,满足给出的矩阵至少能还原出一组可行的三阶幻方。
输出格式
如果仅能还原出一组可行的三阶幻方,则将其输出,否则输出“Too Many”(不包含引号)。
样例输入
0 7 2
0 5 0
0 3 0
样例输出
6 7 2
1 5 9
8 3 4
数据规模和约定
思路
由于三阶幻方较少,且每个三阶幻方占用内存小,可以穷举,再暴力枚举。
代码
int A[][]={
{6,7,2,1,5,9,8,3,4},
{8,3,4,1,5,9,6,7,2},
{2,9,4,7,5,3,6,1,8},
{6,1,8,7,5,3,2,9,4},
{2,7,6,9,5,1,4,3,8},
{4,3,8,9,5,1,2,7,6},
{4,9,2,3,5,7,8,1,6},
{8,1,6,3,5,7,4,9,2},
};
void test() {
int[] a = new int[9];
Scanner inp = new Scanner(System.in);
for(int i = 0; i < 9; i++)
a[i] = inp.nextInt();
int[] y = {};
int s = 0;
for(int i = 0; i < 8; i++) {
boolean flag = true;
for(int j = 0; j < 9; j++) {
if(a[j] == 0) continue;
else if(a[j] != A[i][j]) {
flag = false;
break;
}
}
if(flag == true) {
s++;
if(s==1) y = A[i];
}
}
if(s==1) {
for(int i = 0; i < 9; i++) {
System.out.print(y[i] + " ");
if((i+1)%3==0)
System.out.println();
}
} else
System.out.println("Too Many");
}