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 } 

 

posted @ 2016-01-10 11:24  我不萌、我要高冷  阅读(236)  评论(0编辑  收藏  举报