poj2996 Help Me with the Game

题目:点击打开链接

模拟。。。

好像是要用模拟做这题,我自己用的简单的排序,先定义两个结构体数组记录白棋和黑棋的状态(类别,行号,列号),然后分别对白棋数组和黑棋数按输出要求进行排序,能通过所给案例估计就差不多了,我的代码好长额,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 ;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值