[ACM ] 10196 - Check The Check

看板C_and_CPP (C/C++)作者 (請給我前叉)時間16年前 (2009/04/25 04:15), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/2 (看更多)
這題是我們的作業 可是我目前,ACM測資過了 別人給的亂七八糟測資也都過了(單項測+無王情形) 是不是我漏掉什麼呢? 測資也沒要求說要output空一行啊 output也是從ACM複製貼上的 想不到還有什麼可能性了... ps.程式碼有點長有點雜亂,請小心服用 #include <stdio.h> #include <stdlib.h> struct coordinates { int x,y; }cur; char chessboard[8][8]; int isWKInCheck(struct coordinates wKing); int isBKInCheck(struct coordinates bKing); int main() { int cou=1,i,j,wKingCheck,bKingCheck; while (1) { struct coordinates wKing,bKing;//declare wKing.x=wKing.y=bKing.x=bKing.y=-9;//initialize to -9 for (i=0;i<8;i++) scanf("%s",chessboard[i]); int end=1; for (j=0;j<8;j++) for (i=0;i<8;i++) if (chessboard[j][i]!='.') { end=0; break; } if (end) break; for (j=0;j<8;j++) for (i=0;i<8;i++) { if (chessboard[j][i]=='K') { wKing.x=i; wKing.y=j; } else if (chessboard[j][i]=='k') { bKing.x=i; bKing.y=j; } } wKingCheck=isWKInCheck(wKing); bKingCheck=isBKInCheck(bKing); if (wKingCheck) printf("Game #%d: white king is in check.\n",cou); else if (bKingCheck) printf("Game #%d: black king is in check.\n",cou); else printf("Game #%d: no king is in check.\n",cou); cou++; } return 0; } int isWKInCheck(struct coordinates wKing) { cur=wKing;//the first assignment while (1)//left of the above { --cur.y; --cur.x; char curChar=chessboard[cur.y][cur.x];//declare a char to make statements simpler if (cur.x<0||cur.x>7||cur.y<0||cur.y>7) break;//break condition if (curChar=='b'||curChar=='p'||curChar=='q') return 1; else if (curChar=='n'||curChar=='r'||curChar=='k') break;//the enemy's chesses but not the correct one else if (curChar<83&&curChar>65) break;//own chesses } cur=wKing;//re-assignment while (1)//the above { --cur.y; char curChar=chessboard[cur.y][cur.x];//declare a char to make statements simpler if (cur.x<0||cur.x>7||cur.y<0||cur.y>7) break;//break condition if (curChar=='r'||curChar=='q') return 1; else if (curChar=='b'||curChar=='n'||curChar=='p'||curChar=='k') break;//the enemy's chesses but not the correct one else if (curChar<83&&curChar>65) break;//own chesses } cur=wKing;//re-assignment while (1)//right of the above { --cur.y; ++cur.x; char curChar=chessboard[cur.y][cur.x];//declare a char to make statements simpler if (cur.x<0||cur.x>7||cur.y<0||cur.y>7) break;//break condition if (curChar=='p'||curChar=='b'||curChar=='q') return 1; else if (curChar=='n'||curChar=='r'||curChar=='k') break;//the enemy's chesses but not the correct one else if (curChar<83&&curChar>65) break;//own chesses } cur=wKing;//re-assignment while (1)//left { --cur.x; char curChar=chessboard[cur.y][cur.x];//declare a char to make statements simpler if (cur.x<0||cur.x>7||cur.y<0||cur.y>7) break;//break condition if (curChar=='r'||curChar=='q') return 1; else if (curChar=='b'||curChar=='n'||curChar=='p'||curChar=='k') break;//the enemy's chesses but not the correct one else if (curChar<83&&curChar>65) break;//own chesses } cur=wKing;//re-assignment while (1)//right { ++cur.x; char curChar=chessboard[cur.y][cur.x];//declare a char to make statements simpler if (cur.x<0||cur.x>7||cur.y<0||cur.y>7) break;//break condition if (curChar=='r'||curChar=='q') return 1; else if (curChar=='b'||curChar=='n'||curChar=='p'||curChar=='k') break;//the enemy's chesses but not the correct one else if (curChar<83&&curChar>65) break;//own chesses } cur=wKing;//re-assignment while (1)//left of the below { ++cur.y; --cur.x; char curChar=chessboard[cur.y][cur.x];//declare a char to make statements simpler if (cur.x<0||cur.x>7||cur.y<0||cur.y>7) break;//break condition if (curChar=='b'||curChar=='q') return 1; else if (curChar=='n'||curChar=='p'||curChar=='r'||curChar=='k') break;//the enemy's chesses but not the correct one else if (curChar<83&&curChar>65) break;//own chesses } cur=wKing;//re-assignment while (1)//the below { ++cur.y; char curChar=chessboard[cur.y][cur.x];//declare a char to make statements simpler if (cur.x<0||cur.x>7||cur.y<0||cur.y>7) break;//break condition if (curChar=='r'||curChar=='q') return 1; else if (curChar=='b'||curChar=='n'||curChar=='p'||curChar=='k') break;//the enemy's chesses but not the correct one else if (curChar<83&&curChar>65) break;//own chesses } cur=wKing;//re-assignment while (1)//right of the below { ++cur.y; ++cur.x; char curChar=chessboard[cur.y][cur.x];//declare a char to make statements simpler if (cur.x<0||cur.x>7||cur.y<0||cur.y>7) break;//break condition if (curChar=='b'||curChar=='q') return 1; else if (curChar=='n'||curChar=='p'||curChar=='r'||curChar=='k') break;//the enemy's chesses but not the correct one else if (curChar<83&&curChar>65) break;//own chesses } struct coordinates N[8];//assume that the knight are on one of the 8 situation N[0].x=wKing.x-2;//initialize N[0].y=wKing.y-1; N[1].x=wKing.x-1; N[1].y=wKing.y-2; N[2].x=wKing.x+2; N[2].y=wKing.y-1; N[3].x=wKing.x+1; N[3].y=wKing.y-2; N[4].x=wKing.x-2; N[4].y=wKing.y+1; N[5].x=wKing.x-1; N[5].y=wKing.y+2; N[6].x=wKing.x+2; N[6].y=wKing.y+1; N[7].x=wKing.x+1; N[7].y=wKing.y+2; int i; for (i=0;i<8;i++) if (chessboard[N[i].y][N[i].x]=='n') return 1; return 0; } int isBKInCheck(struct coordinates bKing) { cur=bKing;//the first assignment while (1)//left of the above { --cur.y; --cur.x; char curChar=chessboard[cur.y][cur.x];//declare a char to make statements simpler if (cur.x<0||cur.x>7||cur.y<0||cur.y>7) break;//break condition if (curChar=='B'||curChar=='Q') return 1; else if (curChar=='N'||curChar=='P'||curChar=='R'||curChar=='K') break;//the enemy's chesses but not the correct one else if (curChar<115&&curChar>97) break;//own chesses } cur=bKing;//re-assignment while (1)//the above { --cur.y; char curChar=chessboard[cur.y][cur.x];//declare a char to make statements simpler if (cur.x<0||cur.x>7||cur.y<0||cur.y>7) break;//break condition if (curChar=='R'||curChar=='Q') return 1; else if (curChar=='B'||curChar=='N'||curChar=='P'||curChar=='K') break;//the enemy's chesses but not the correct one else if (curChar<115&&curChar>97) break;//own chesses } cur=bKing;//re-assignment while (1)//right of the above { --cur.y; ++cur.x; char curChar=chessboard[cur.y][cur.x];//declare a char to make statements simpler if (cur.x<0||cur.x>7||cur.y<0||cur.y>7) break;//break condition if (curChar=='B'||curChar=='Q') return 1; else if (curChar=='N'||curChar=='P'||curChar=='R'||curChar=='K') break;//the enemy's chesses but not the correct one else if (curChar<115&&curChar>97) break;//own chesses } cur=bKing;//re-assignment while (1)//left { --cur.x; char curChar=chessboard[cur.y][cur.x];//declare a char to make statements simpler if (cur.x<0||cur.x>7||cur.y<0||cur.y>7) break;//break condition if (curChar=='R'||curChar=='Q') return 1; else if (curChar=='B'||curChar=='N'||curChar=='P'||curChar=='K') break;//the enemy's chesses but not the correct one else if (curChar<115&&curChar>97) break;//own chesses } cur=bKing;//re-assignment while (1)//right { ++cur.x; char curChar=chessboard[cur.y][cur.x];//declare a char to make statements simpler if (cur.x<0||cur.x>7||cur.y<0||cur.y>7) break;//break condition if (curChar=='R'||curChar=='Q') return 1; else if (curChar=='B'||curChar=='N'||curChar=='P'||curChar=='K') break;//the enemy's chesses but not the correct one else if (curChar<115&&curChar>97) break;//own chesses } cur=bKing;//re-assignment while (1)//left of the below { ++cur.y; --cur.x; char curChar=chessboard[cur.y][cur.x];//declare a char to make statements simpler if (cur.x<0||cur.x>7||cur.y<0||cur.y>7) break;//break condition if (curChar=='B'||curChar=='P'||curChar=='Q') return 1; else if (curChar=='N'||curChar=='R'||curChar=='K') break;//the enemy's chesses but not the correct one else if (curChar<115&&curChar>97) break;//own chesses } cur=bKing;//re-assignment while (1)//the below { ++cur.y; char curChar=chessboard[cur.y][cur.x];//declare a char to make statements simpler if (cur.x<0||cur.x>7||cur.y<0||cur.y>7) break;//break condition if (curChar=='R'||curChar=='Q') return 1; else if (curChar=='B'||curChar=='N'||curChar=='P'||curChar=='K') break;//the enemy's chesses but not the correct one else if (curChar<115&&curChar>97) break;//own chesses } cur=bKing;//re-assignment while (1)//right of the below { ++cur.y; ++cur.x; char curChar=chessboard[cur.y][cur.x];//declare a char to make statements simpler if (cur.x<0||cur.x>7||cur.y<0||cur.y>7) break;//break condition if (curChar=='P'||curChar=='B'||curChar=='Q') return 1; else if (curChar=='N'||curChar=='R'||curChar=='K') break;//the enemy's chesses but not the correct one else if (curChar<115&&curChar>97) break;//own chesses } struct coordinates N[8];//assume that the knight are on one of the 8 situation N[0].x=bKing.x-2;//initialize N[0].y=bKing.y-1; N[1].x=bKing.x-1; N[1].y=bKing.y-2; N[2].x=bKing.x+2; N[2].y=bKing.y-1; N[3].x=bKing.x+1; N[3].y=bKing.y-2; N[4].x=bKing.x-2; N[4].y=bKing.y+1; N[5].x=bKing.x-1; N[5].y=bKing.y+2; N[6].x=bKing.x+2; N[6].y=bKing.y+1; N[7].x=bKing.x+1; N[7].y=bKing.y+2; int i; for (i=0;i<8;i++) if (chessboard[N[i].y][N[i].x]=='N') return 1; return 0; } Problem Verdict Language Run Time Submission Date Check The Check Wrong answer C++ 0.010 2009-04-22 12:46:22 感謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.227.191.147
文章代碼(AID): #19yXteOf (C_and_CPP)
文章代碼(AID): #19yXteOf (C_and_CPP)