1 /*排序函数要写对,优先级:K,Q,R,B,N,P
2 白色的:如果优先级一样,那么按照行数大的优先,如果行数一样,那么列数小的优先
3 黑色的:如果优先级一样,那么按照行数小的优先,如果行数一样,那么列数小的优先
4 第一个在左下脚,向上数*/
5 #include<stdio.h>
6 #include<string.h>
7 #include<algoritm>
8 using namespace std;
9 struct point
10 {
11 int i,j;
12 char c;
13 int num;
14 }p[1000];
15 int cmp(const point a,const point b)
16 {
17 if(a.num==b.num)
18 {
19 if(a.i==b.i) return a.j<b.j;
20 return a.i>b.i;
21 }
22 return a.num>b.num;
23 }
24 int cmp1(const point a,const point b)
25 {
26 if(a.num==b.num)
27 {
28 if(a.i==b.i) return a.j<b.j;
29 return a.i<b.i;
30 }
31 return a.num>b.num;
32 }
33 int chack(char c)
34 {
35 if(c=='K' || c=='k') return 5;
36 if(c=='Q' || c=='q') return 4;
37 if(c=='R' || c=='r') return 3;
38 if(c=='B' || c=='b') return 2;
39 if(c=='N' || c=='n') return 1;
40 if(c=='P' || c=='p') return 0;
41 }
42 int find(int n)
43 {
44 if(n==2) return 'a';
45 if(n==6) return 'b';
46 if(n==10) return 'c';
47 if(n==14) return 'd';
48 if(n==18) return 'e';
49 if(n==22) return 'f';
50 if(n==26) return 'g';
51 if(n==30) return 'h';
52 }
53 int ok(int n)
54 {
55 if(n==16) return 1;
56 if(n==14) return 2;
57 if(n==12) return 3;
58 if(n==10) return 4;
59 if(n==8) return 5;
60 if(n==6) return 6;
61 if(n==4) return 7;
62 if(n==2) return 8;
63 }
64 int main()
65 {
66 int i,j,k,n,m;
67 char s[20][100];
68 memset(p,0,sizeof(p));
69 for(i=1;i<=17;i++)
70 {
71 gets(s[i]);
72 }
73 k=0;
74 for(i=17;i>=1;i--)
75 {
76 m=strlen(s[i]);
77 for(j=0;j<m;j++)
78 {
79 if(s[i][j]=='K' || s[i][j]=='Q' || s[i][j]=='R' || s[i][j]=='B'
80 || s[i][j]=='N' || s[i][j]=='P')
81 {
82
83 p[k].i=i;
84 p[k].j=j;
85 p[k].c=s[i][j];
86 p[k++].num=chack(s[i][j]);
87 }
88 }
89 }
90
91 sort(p,p+k,cmp);
92 printf("White: ");
93 for(j=0;j<k;j++)
94 {
95 if(j==0 && p[j].c=='P' )
96 {
97 printf("%c%d",find(p[j].j),ok(p[j].i));
98 }
99 else if(j==0) printf("%c%c%d",p[j].c,find(p[j].j),ok(p[j].i));
100 else
101 {
102 if(p[j].c=='P') printf(",%c%d",find(p[j].j),ok(p[j].i));
103 else printf(",%c%c%d",p[j].c,find(p[j].j),ok(p[j].i));
104 }
105 }
106 printf("\n");
107 for(i=0;i<k;i++)
108 {
109 p[i].i=0;
110 p[i].j=0;
111 p[i].num=0;
112 p[i].c='\0';
113 }
114 k=0;
115 for(i=1;i<=17;i++)
116 {
117 m=strlen(s[i]);
118 for(j=0;j<m;j++)
119 {
120 if(s[i][j]=='k' || s[i][j]=='q' || s[i][j]=='r' || s[i][j]=='b'
121 || s[i][j]=='n' || s[i][j]=='p')
122 {
123
124 p[k].i=i;
125 p[k].j=j;
126 p[k].c=s[i][j];
127 p[k++].num=chack(s[i][j]);
128 }
129 }
130 }
131 sort(p,p+k,cmp1);
132 printf("Black: ");
133 for(j=0;j<k;j++)
134 {
135 if(j==0 && p[j].c=='p' )
136 {
137 printf("%c%d",find(p[j].j),ok(p[j].i));
138 }
139 else if(j==0) printf("%c%c%d",p[j].c-32,find(p[j].j),ok(p[j].i));
140 else
141 {
142 if(p[j].c=='p') printf(",%c%d",find(p[j].j),ok(p[j].i));
143 else printf(",%c%c%d",p[j].c-32,find(p[j].j),ok(p[j].i));
144 }
145 }
146 printf("\n");
147 return 0;
148 }