poj 2996
提示:很烦很简单的国际象棋棋盘模拟,输入比较麻烦而已
输出时:
1、不论黑白,KQRBN P均是依次输出,强制大写,但不输出“P”,只输出其坐标
2、对白棋的位置,小行优先大行输出(行的数字越小则优先)同行则按列的顺序(a~h)
3、对黑棋的位置,大行优先小行输出(行的数字越大则优先)同行则按列的顺序(a~h)
4、从2、3点可以看出,黑棋总是先被输入,白棋总是后输入,即黑棋总在棋盘上方,白棋总在棋盘下方,所以输入完成后,对于黑色棋子只需要按类型次序输出,同类型棋子的顺序就是输入的顺序;而白色棋子要考虑同类型棋子之间的排序,而同类型棋子之间又仅需要考虑不同行棋子之间的排序,同一行棋子的排序就是输入顺序
5、棋子可能不齐全,不存在的棋子不输出,用标记解决
6、最后的棋子后面不带逗号,要找出最后的棋子
题意转自 優YoU http://user.qzone.qq.com/289065406/blog/1299148268
根据以上信息可以直接贴代码了
1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 char white[]={'K','Q','R','B','N','P'}; 5 char black[]={'k','q','r','b','n','p'}; 6 char goal[10][10]; 7 int main() 8 { 9 char a,b,c,d; 10 char s[100]; 11 gets(s); 12 for(int j,i=7;i>=0;--i){ 13 getchar(); 14 for(j=0;j<=7;++j){ 15 scanf("%c%c%c%c",&a,&b,&c,&d); 16 goal[i][j]=b; 17 } 18 getchar();gets(s); 19 } 20 printf("White: "); 21 int flag=0; 22 for(int k=0;k<6;++k) 23 for(int j,i=0;i<=7;++i) 24 for(j=0;j<=7;++j) 25 if(goal[i][j]==white[k]){ 26 if(flag) printf(","); 27 if(goal[i][j]!='P') printf("%c%c%d",white[k],j+'a',i+1); 28 else printf("%c%d",j+'a',i+1); 29 flag++; 30 } 31 printf("\n"); 32 flag=0; 33 printf("Black: "); 34 for(int k=0;k<6;++k) 35 for(int j,i=7;i>=0;--i) 36 for(j=0;j<=7;++j) 37 if(goal[i][j]==black[k]){ 38 if(flag) printf(","); 39 if(goal[i][j]!='p') printf("%c%c%d",white[k],j+'a',i+1); 40 else printf("%c%d",j+'a',i+1); 41 flag++; 42 } 43 printf("\n"); 44 return 0; 45 }