Files
RISC-V-Simulator/test/testcases/magic.c
2024-07-24 11:54:23 +00:00

75 lines
1.9 KiB
C

#include "io.inc"
int make[3][3];
int color[10];
int count[1];
int i;
int j;
void origin(int N) {
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
make[i][j] = 0;
}
}
void search(int x, int y, int z) {
int s;
int i;
int j;
if ((y > 0 || y < 0) || x == 0 ||
make[x - 1][0] + make[x - 1][1] + make[x - 1][2] == 15) {
if (x == 2 && y == 2) {
make[2][2] = 45 - z;
s = make[0][0] + make[0][1] + make[0][2];
if (make[1][0] + make[1][1] + make[1][2] == s &&
make[2][0] + make[2][1] + make[2][2] == s &&
make[0][0] + make[1][0] + make[2][0] == s &&
make[0][1] + make[1][1] + make[2][1] == s &&
make[0][2] + make[1][2] + make[2][2] == s &&
make[0][0] + make[1][1] + make[2][2] == s &&
make[2][0] + make[1][1] + make[0][2] == s) {
count[0] = count[0] + 1;
for (i = 0; i <= 2; i++) {
for (j = 0; j <= 2; j++) {
printInt(make[i][j]);
printStr(" ");
}
printStr("\n");
}
printStr("\n");
}
} else {
if (y == 2) {
make[x][y] = 15 - make[x][0] - make[x][1];
if (make[x][y] > 0 && make[x][y] < 10 && color[make[x][y]] == 0) {
color[make[x][y]] = 1;
if (y == 2)
search(x + 1, 0, z + make[x][y]);
else
search(x, y + 1, z + make[x][y]);
color[make[x][y]] = 0;
}
} else {
for (i = 1; i <= 9; i++) {
if (color[i] == 0) {
color[i] = 1;
make[x][y] = i;
if (y == 2)
search(x + 1, 0, z + i);
else
search(x, y + 1, z + i);
make[x][y] = 0;
color[i] = 0;
}
}
}
}
}
}
int main() {
origin(3);
search(0, 0, 0);
printInt(count[0]);
return judgeResult % Mod; // 106
}