poj2996

  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("
");
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='';
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("
");
147     return 0;
148 }
原文地址:https://www.cnblogs.com/okboy/p/3223429.html