题目:点击打开链接
模拟。。。
好像是要用模拟做这题,我自己用的简单的排序,先定义两个结构体数组记录白棋和黑棋的状态(类别,行号,列号),然后分别对白棋数组和黑棋数按输出要求进行排序,能通过所给案例估计就差不多了,我的代码好长额,9027B,我勒个去,看别人的一般2000或3000多,不过只要写一个函数,另一个copy修改点就ok了。。。
下面为AC代码:
#include <stdio.h>
#include <string.h>
char s[25][50];
int len1,len2;
struct node
{
char ch;
char col; //列号,从左至右为a-h
int row;//行号,从上之下依次为8-1
};
struct node white[65],black[65];
void sort1(struct node a[65]);
void sort2(struct node a[65]);
int main()
{
int i,j;
for(i=0;i<17;i++)
scanf("%s",s[i]);
len1=len2=0;
for(i=1;i<17;i+=2)
{
for(j=2;j<33;j+=4)
if(s[i][j]=='K' || s[i][j]=='Q' || s[i][j]=='R' || s[i][j]=='B' ||
s[i][j]=='N' || s[i][j]=='P')
{
white[len1].ch=s[i][j];
white[len1].col=(j<6?'a':(j-2)/4+'a');
white[len1].row=8-(i-1)/2;
len1++;
}
else if(s[i][j]=='k' || s[i][j]=='q' || s[i][j]=='r' || s[i][j]=='b' ||
s[i][j]=='n' || s[i][j]=='p')
{
black[len2].ch=s[i][j];
black[len2].col=(j<6?'a':(j-2)/4+'a');
black[len2].row=8-(i-1)/2;
len2++;
}
}
sort1(white);
sort2(black);
printf("White: ");
for(i=0;i<len1;i++)
if(i==len1-1)
{
if(white[i].ch=='P')
printf("%c%d\n",white[i].col,white[i].row);
else
printf("%c%c%d\n",white[i].ch,white[i].col,white[i].row);
}
else
{
if(white[i].ch=='P')
printf("%c%d,",white[i].col,white[i].row);
else
printf("%c%c%d,",white[i].ch,white[i].col,white[i].row);
}
printf("Black: ");
for(i=0;i<len2;i++)
if(i==len2-1)
{
if(white[i].ch=='P')
printf("%c%d\n",black[i].col,black[i].row);
else
printf("%c%c%d\n",black[i].ch-32,black[i].col,black[i].row);
}
else
{
if(white[i].ch=='P')
printf("%c%d,",black[i].col,black[i].row);
else
printf("%c%c%d,",black[i].ch-32,black[i].col,black[i].row);
}
return 0;
}
void sort1(struct node a[65])
{
int i,j;
char ch;
for(i=0;i<len1-1;i++)
for(j=0;j<len1-1-i;j++)
{
if(a[j+1].ch=='K')
{
if(a[j].ch=='K')
{
if(a[j+1].col<a[j].col || (a[j+1].col==a[j].col&&a[j+1].row<a[j].row))
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j].ch=='Q' || a[j].ch=='R' || a[j].ch=='B' || a[j].ch=='N' || a[j].ch=='P')
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j+1].ch=='Q')
{
if(a[j].ch=='Q')
{
if(a[j+1].col<a[j].col || (a[j+1].col==a[j].col&&a[j+1].row<a[j].row))
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j].ch=='R' || a[j].ch=='B' || a[j].ch=='N' || a[j].ch=='P')
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j+1].ch=='R')
{
if(a[j].ch=='R')
{
if(a[j+1].col<a[j].col || (a[j+1].col==a[j].col&&a[j+1].row<a[j].row))
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j].ch=='B' || a[j].ch=='N' || a[j].ch=='P')
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j+1].ch=='B')
{
if(a[j].ch=='B')
{
if(a[j+1].col<a[j].col || (a[j+1].col==a[j].col&&a[j+1].row<a[j].row))
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j].ch=='N' || a[j].ch=='P')
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j+1].ch=='N')
{
if(a[j].ch=='N')
{
if(a[j+1].col<a[j].col || (a[j+1].col==a[j].col&&a[j+1].row<a[j].row))
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j].ch=='P')
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j+1].ch=='P')
{
if(a[j].ch=='P')
{
if(a[j+1].row<a[j].row || (a[j+1].row==a[j].row&&a[j+1].col<a[j].col))
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
}
}
return ;
}
void sort2(struct node a[65])
{
int i,j;
char ch;
for(i=0;i<len2-1;i++)
for(j=0;j<len2-1-i;j++)
{
if(a[j+1].ch=='k')
{
if(a[j].ch=='k')
{
if((a[j+1].row!=a[j].row&&a[j+1].col>a[j].col) || (a[j+1].row==a[j].row&&a[j+1].col<a[j].col))
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j].ch=='q' || a[j].ch=='r' || a[j].ch=='b' || a[j].ch=='n' || a[j].ch=='p')
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j+1].ch=='q')
{
if(a[j].ch=='q')
{
if((a[j+1].row!=a[j].row&&a[j+1].col>a[j].col) || (a[j+1].row==a[j].row&&a[j+1].col<a[j].col))
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j].ch=='r' || a[j].ch=='b' || a[j].ch=='n' || a[j].ch=='p')
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j+1].ch=='r')
{
if(a[j].ch=='r')
{
if((a[j+1].row!=a[j].row&&a[j+1].col>a[j].col) || (a[j+1].row==a[j].row&&a[j+1].col<a[j].col))
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j].ch=='b' || a[j].ch=='n' || a[j].ch=='p')
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j+1].ch=='b')
{
if(a[j].ch=='b')
{
if((a[j+1].row!=a[j].row&&a[j+1].col>a[j].col) || (a[j+1].row==a[j].row&&a[j+1].col<a[j].col))
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j].ch=='n' || a[j].ch=='p')
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j+1].ch=='n')
{
if(a[j].ch=='n')
{
if((a[j+1].row!=a[j].row&&a[j+1].col>a[j].col) || (a[j+1].row==a[j].row&&a[j+1].col<a[j].col))
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j].ch=='p')
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
else if(a[j+1].ch=='p')
{
if(a[j].ch=='p')
{
if((a[j+1].row!=a[j].row&&a[j+1].col>a[j].col) || (a[j+1].row==a[j].row&&a[j+1].col<a[j].col))
{
int num;
ch=a[j].ch;a[j].ch=a[j+1].ch;a[j+1].ch=ch;
ch=a[j].col;a[j].col=a[j+1].col;a[j+1].col=ch;
num=a[j].row;a[j].row=a[j+1].row;a[j+1].row=num;
}
}
}
}
return ;
}