象棋(没通过先保留代码)

一直不通过难受
#include<stdio.h> #include<string.h> int site[11][11]; int x[11]; int yy[11]; void show() { for (int i = 1; i < 11; i++) { for (int j = 1; j < 10; j++) { printf("%d", site[i][j]); } putchar('\n'); } } void cannon(int x, int y) { //判断上方 for (int i = x - 1; i > 0; i--) { if (site[i][y] == 2) { for (int j = i - 1; j > 0; j--) if (site[j][y] != 2) site[j][y] = 0; else { site[j - 1][y] = 0; break; } break; } } //判断下方 for (int i = x + 1; i < 11; i++) { if (site[i][y] == 2) { for (int j = i + 1; j < 11; j++) if (site[j][y] != 2) site[j][y] = 0; else { site[j + 1][y] = 0; break; } break; } } //判断右方 for (int i = y + 1; i < 10; i++) { if (site[x][i] == 2) { for (int j = i + 1; j < 10; j++) if (site[x][j] != 2) site[x][j] = 0; else { site[x][j+1] = 0; break; } break; } } //判断左方 for (int i = y - 1; i > 0; i--) { if (site[x][i] == 2) { for (int j = i - 1; j >0; j--) if (site[x][j] != 2) site[x][j] = 0; else { site[x][j - 1] = 0; break; } break; } } } void general(int x, int y) { for (int i = x - 1; i > 0; i--) { if (site[i][y] == 2) break; site[i][y] = 0; } } void horse(int x, int y) { if (site[x - 1][y] != 2) site[x - 2][y - 1] = site[x - 2][y + 1] = 0; if (site[x + 1][y] != 2) site[x + 2][y - 1] = site[x + 2][y + 1] = 0; if (site[x][y - 1] != 2) site[x + 1][y - 2] = site[x - 1][y - 2] = 0; if (site[x][y + 1] != 2) site[x - 1][y + 2] = site[x + 1][y + 2] = 0; } void chariot(int x, int y) { //判断上方 for (int i = x - 1; i > 0; i--) { if (site[i][y] == 2) { site[i - 1][y] = 0; break; } site[i][y] = 0; } //判断下方 for (int i = x + 1; i < 11; i++) { if (site[i][y] == 2) { site[i +1][y] = 0; break; } site[i][y] = 0; } //判断左方 for (int i = y - 1; i >0; i--) { if (site[x][i] == 2) { site[x][i-1] = 0; break; } site[x][i] = 0; } //判断右方 for (int i = y + 1; i < 11; i++) { if (site[x][i] == 2) { site[x][i+1] = 0; break; } site[x][i] = 0; } } int check(int x, int y,int Rx,int Ry) { int q = 1;//用于记录是否红方将和黑方将中间有棋子 for (int i = x + 1; i < Rx; i++) if (yy[i] == y) q = 0; if (y == Ry && q) return 0; if (x == 1 && y == 4) { if (site[2][4] == 0 && site[1][5] == 0) return 1; else return 0; } if (x == 2 && y == 4) { if (site[1][4] == 0 && site[3][4] == 0 && site[2][5] == 0) return 1; else return 0; } if (x == 3 && y == 4) { if (site[2][4] == 0 && site[3][5] == 0) return 1; else return 0; } if (x == 1 && y == 5) { if (site[1][4] == 0 && site[1][6] == 0 && site[2][5] == 0) return 1; else return 0; } if (x == 2 && y == 5) { if (site[1][5] == 0 && site[2][4] == 0 && site[2][6] == 0 && site[3][5] == 0) return 1; else return 0; } if (x == 3 && y == 5) { if (site[3][4] == 0 && site[3][6] == 0 && site[2][5] == 0) return 1; else return 0; } if (x == 1 && y == 6) { if (site[1][5] == 0 && site[2][6] == 0) return 1; else return 0; } if (x == 2 && y == 6) { if (site[1][6] == 0 && site[2][5] == 0 && site[3][6] == 0) return 1; else return 0; } if (x == 3 && y == 6) { if (site[3][5] == 0 && site[2][6] == 0) return 1; else return 0; } } int main(void) { int cmd, XB, YB; memset(x, 0, sizeof(x)); memset(yy, 0, sizeof(yy)); while (scanf("%d %d %d", &cmd, &XB, &YB) && cmd) { for (int i = 1; i <= 10; i++) { for (int j = 1; j <= 10; j++) { site[i][j] = 1; } } site[XB][YB] = 2; char ch[10]; int q = 0; int XC, YC; int n = cmd; int X = 0, Y = 0; while (cmd--) { getchar(); scanf("%c", &ch[q++]); scanf("%d", &XC); scanf("%d", &YC); site[XC][YC] = 2; x[X++] = XC; yy[Y++] = YC; } int mx = 0; int my = 0; int m = 0; int Rx, Ry;//记录红方将位置 while (n--) { if (ch[m] == 'G') { Rx = x[m]; Ry = yy[m]; general(x[mx++], yy[my++]); } //如果是将军的话哪些地方会为0 else if (ch[m] == 'R') { chariot(x[mx++], yy[my++]); }//如果是车的话 else if (ch[m] == 'H') {horse( x[mx++], yy[my++]); }//如果是马的话 else if (ch[m] == 'C') { cannon(x[mx++], yy[my++]); }//如果是炮的话 m++; } if (check(XB,YB,Rx,Ry)) printf("YES\n"); else printf("NO\n"); } return 0; }
计算机小白记录学习过程,喜欢就点个推荐和关注吧O(∩_∩)O哈哈~

浙公网安备 33010602011771号