您的位置:首页 > 其它

poj 2996

2016-01-10 11:24 399 查看
提示:很烦很简单的国际象棋棋盘模拟,输入比较麻烦而已

输出时:

1、不论黑白,KQRBN P均是依次输出,强制大写,但不输出“P”,只输出其坐标

2、对白棋的位置,小行优先大行输出(行的数字越小则优先)同行则按列的顺序(a~h)

3、对黑棋的位置,大行优先小行输出(行的数字越大则优先)同行则按列的顺序(a~h)

4、从2、3点可以看出,黑棋总是先被输入,白棋总是后输入,即黑棋总在棋盘上方,白棋总在棋盘下方,所以输入完成后,对于黑色棋子只需要按类型次序输出,同类型棋子的顺序就是输入的顺序;而白色棋子要考虑同类型棋子之间的排序,而同类型棋子之间又仅需要考虑不同行棋子之间的排序,同一行棋子的排序就是输入顺序

5、棋子可能不齐全,不存在的棋子不输出,用标记解决

6、最后的棋子后面不带逗号,要找出最后的棋子

题意转自  優YoU http://user.qzone.qq.com/289065406/blog/1299148268
根据以上信息可以直接贴代码了

#include<cstdio>
#include<cstring>
using namespace std;
char white[]={'K','Q','R','B','N','P'};
char black[]={'k','q','r','b','n','p'};
char goal[10][10];
int main()
{
char a,b,c,d;
char s[100];
gets(s);
for(int j,i=7;i>=0;--i){
getchar();
for(j=0;j<=7;++j){
scanf("%c%c%c%c",&a,&b,&c,&d);
goal[i][j]=b;
}
getchar();gets(s);
}
printf("White: ");
int flag=0;
for(int k=0;k<6;++k)
for(int j,i=0;i<=7;++i)
for(j=0;j<=7;++j)
if(goal[i][j]==white[k]){
if(flag)    printf(",");
if(goal[i][j]!='P')    printf("%c%c%d",white[k],j+'a',i+1);
else    printf("%c%d",j+'a',i+1);
flag++;
}
printf("\n");
flag=0;
printf("Black: ");
for(int k=0;k<6;++k)
for(int j,i=7;i>=0;--i)
for(j=0;j<=7;++j)
if(goal[i][j]==black[k]){
if(flag)    printf(",");
if(goal[i][j]!='p')    printf("%c%c%d",white[k],j+'a',i+1);
else    printf("%c%d",j+'a',i+1);
flag++;
}
printf("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: