题目描述
无论在中国象棋还是国际象棋中“马”都是走“日”字的。比如我们把国际象棋的棋盘的左上角的坐标设为(0,0),它右边格子的坐标为(0,1),下边的格子坐标为(1,0),右下格子的坐标为(1,1),其它点的坐标以此类推。如果马现在位于(4,4)上,那么它一步能走到的格子的坐标分别为(3,2)、(2,3)、(2,5)、(3,6)、(5,6)、(6,5)、(6,3)、(5,2),现在我们把这八种走法分别标记为1、2、3、4、5、6、7、8,也就是说当输入为1是,代表马向左上偏下的点走,输入为2时代表马向左上偏上的点走,其它依次类推。现请你写一段程序,记录马在棋盘上行走的路线。
输入:
先是八行,每行为长度为8的字符串,代表棋盘上每个格里的字符(只包含大写字母)。
第9行是2个整数,代表马的初始位置。
第10行是一个字符串(长度大于0小于30),代表马每一步如何走。测试数据保证合法,且保证不存在走到棋盘以外的情况。
输出:
只有一行,依次为马行走路线上的格子里的字符(包括马的初始位置)。
输入样例
HIJKLMNO
PQERSTUV
WDXYLZAB
CDEFGHLI
LJKLMNOP
QRRSTUVO
WXYZOQWE
RTYUIOWP
0 0
555671113
输出样例
HELLOWORLD
#include<iostream>
#include<string>
using namespace std;
int main()
{
char a[8][8];//二维数组存储棋盘
for (int i = 0; i < 8; i++)
{
for (int j = 0; j < 8; j++)
{
cin >> a[i][j];
}
}
int x, y;
cin >> x>> y;
string c;//用string类型表示马每一步如何走
cin >> c;
cout << a[x][y];//输出起始坐标
for (int i = 0; c[i] != '\0'; i++)
{
switch (c[i])
{
case '1':x--, y -= 2; break;
case '2':x -= 2, y--; break;
case '3':x -= 2, y++; break;
case '4':x -= 1, y+=2; break;
case '5':x++, y += 2; break;
case '6':x += 2, y++; break;
case '7':x += 2, y--; break;
case '8':x ++, y-=2; break;
default:break;
}
cout << a[x][y];
}
cout << endl;
return 0;
}