国际象棋棋盘模拟
题意:
1、不论黑白,KQRBNP均是依次输出,强制大写,但不输出“P”,只输出其坐标
2、白棋:行的数字越小则优先输出,同行则按列的顺序(a~h)
3、黑棋:行的数字越大则优先输出,同行则按列的顺序(a~h)
4、棋子可能不齐全,不存在的棋子不输出,用标记解决
5、注意逗号的输出格式
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <queue> #define N 300 using namespace std; struct by { char c; int num; int m0[N]; int m1[N]; } b[N]; struct bby { int m0,m1; } bm[N]; bool cmpw(struct bby q,struct bby w) { if(q.m0==w.m0) return q.m1<w.m1; return q.m0<w.m0; } bool cmpb(struct bby q,struct bby w) { if(q.m0==w.m0) return q.m1<w.m1; return q.m0>w.m0; } int main() { char map[N][N]; memset(b,0,sizeof(b)); int i,k=17,j; for(i=0; i<17; i++) scanf("%s",map[i]); b[0].c='K',b[1].c='Q',b[2].c='R',b[3].c='B',b[4].c='N'; b[10].c='K',b[11].c='Q',b[12].c='R',b[13].c='B',b[14].c='N'; for(i=1; i<k; i+=2) { for(j=0; map[i][j]; j++) { switch(map[i][j]) { case 'K': b[0].m0[b[0].num]=k-i,b[0].m1[b[0].num]=j/4,b[0].num++; break; case 'Q': b[1].m0[b[1].num]=k-i,b[1].m1[b[1].num]=j/4,b[1].num++; break; case 'R': b[2].m0[b[2].num]=k-i,b[2].m1[b[2].num]=j/4,b[2].num++; break; case 'B': b[3].m0[b[3].num]=k-i,b[3].m1[b[3].num]=j/4,b[3].num++; break; case 'N': b[4].m0[b[4].num]=k-i,b[4].m1[b[4].num]=j/4,b[4].num++; break; case 'P': b[5].m0[b[5].num]=k-i,b[5].m1[b[5].num]=j/4,b[5].num++; break; case 'k': b[10].m0[b[10].num]=k-i,b[10].m1[b[10].num]=j/4,b[10].num++; break; case 'q': b[11].m0[b[11].num]=k-i,b[11].m1[b[11].num]=j/4,b[11].num++; break; case 'r': b[12].m0[b[12].num]=k-i,b[12].m1[b[12].num]=j/4,b[12].num++; break; case 'b': b[13].m0[b[13].num]=k-i,b[13].m1[b[13].num]=j/4,b[13].num++; break; case 'n': b[14].m0[b[14].num]=k-i,b[14].m1[b[14].num]=j/4,b[14].num++; break; case 'p': b[15].m0[b[15].num]=k-i,b[15].m1[b[15].num]=j/4,b[15].num++; break; } } } cout<<"White: "; int flag=0; for(i=0; i<=5; i++) { for(j=0; j<b[i].num; j++)/*由于弱弱的我对于结构体的排序不太清楚,就只好另存一个数组中啦*/ { bm[j].m0=b[i].m0[j]/2; bm[j].m1=b[i].m1[j]; } sort(bm,bm+b[i].num,cmpw); for(j=0; j<b[i].num; j++) { if(flag)/*此处的逗号输出想了很久*/ printf(","); flag++; if(i!=5) cout<<b[i].c; printf("%c",bm[j].m1+'a'); printf("%d",bm[j].m0); } } cout<<endl; cout<<"Black: "; flag=0; for(i=10; i<=15; i++) { for(j=0; j<b[i].num; j++) { bm[j].m0=b[i].m0[j]/2; bm[j].m1=b[i].m1[j]; } sort(bm,bm+b[i].num,cmpb); for(j=0; j<b[i].num; j++) { if(flag) printf(","); flag++; if(i!=15) cout<<b[i].c; printf("%c",bm[j].m1+'a'); printf("%d",bm[j].m0); } } cout<<endl; return 0; }