POJ2996 - Help Me with the Game

一道比较烦的模拟题。大概题意如下:

注意事项:

1、输入的时候,行号是倒过来的,及输入的第一行,在输出的时候,行号为8

2、输出顺序为K、Q、R、B、N、P,输出结构为旗子的种类、旗子的列、旗子的行,其中如果旗子的种类为P,则只输出旗子的列和行

3、相同种类旗子,白棋按行号从小到大排列,黑棋从大到小排列。


//Memory Time
//216K 0MS


#include <stdio.h>
#include <iostream>
using namespace std;


/*
1、输出先列后行
2、行号是从下往上计数的,最上面的行是8
4、白 行号为从小到大   黑相反
*/


struct chess
{
char name;
char row;
char col;
};


void printChessInfo(chess* array, int number);


chess white[64];
chess black[64];
// King("K"), Queens ("Q"), Rooks ("R"), Bishops ("B"), Knights ("N"), and pawns.
//   a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z
const char  map[26] = {9,3,9,9,9,9,9,9,9,9,0,9,9,4,9,5,1,2,9,9,9,9,9,9,9,9};
const char  unmap[6] = {'K','Q','R','B','N','P'};


#define COLUMN 33
char chessMap[COLUMN][17]; 
char s[COLUMN];
int main() 
{ 
int whitePt = 0;
int blackPt = 0;
//输入 
for(int i = 8; i > 0; i--) //i row
{
cin >> s;  
cin >> s;
for(int j = 0; j < COLUMN; j++) //j col
{
int colPt = j * 4;
if(!(s[colPt + 2] == '.' || s[colPt + 2] == ':'))
{
if(s[colPt + 2] - 'A' >= 0 && s[colPt + 2] - 'A' < 26)
{
white[whitePt].name = map[s[colPt+2] - 'A'];
white[whitePt].row = i;
white[whitePt].col = j;
whitePt++;
}else if(s[colPt+2] - 'a' >= 0 && s[colPt+2] - 'a' < 26)
{
black[blackPt].name = map[s[colPt+2] - 'a'];
black[blackPt].row = i;
black[blackPt].col = j;
blackPt++;
}
}
}
}
cin >> s;

//输出 White
cout << "White: "; 
for(int i = 0; i < whitePt; i++) //注意一定要是稳定排序,这里用的冒泡 
{
for(int j = 1; j < whitePt - i; j++)
{
if(white[j].row < white[j-1].row)
{
chess temp = white[j];
white[j] = white[j-1];
white[j-1] = temp;
}
}
}
printChessInfo(white, whitePt);


//输出 Black 
cout << "Black: "; 
printChessInfo(black, blackPt);

return 0;
}


void printChessInfo(chess* array, int number)
{
for(int i = 0; i < number; i++) //注意一定要是稳定排序,这里用的冒泡 
{
for(int j = 1; j < number - i; j++)
{
if(array[j].name < array[j-1].name)
{
chess temp = array[j];
array[j] = array[j-1];
array[j-1] = temp;
}
}
}
for(int i = 0; i < number-1; i++) //注意一定要是稳定排序,这里用的冒泡 
{
if(array[i].name < 5)
cout << unmap[array[i].name];
cout<< (char)(array[i].col + 'a')  << (char)(array[i].row + '0')  << ',';
} 
if(array[number-1].name < 5)
cout << unmap[array[number-1].name];
cout<< (char)(array[number-1].col + 'a') << (char)(array[number-1].row + '0') << endl;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值