无论在中国象棋还是国际象棋中“马”都是走“日”字的。比如我们把国际象棋的棋盘的左上角的坐标设为(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<stdio.h>
#include<string.h>
int main()
{
char s[8][9];
char move[31];
for(int i=0;i<8;i++)
{
scanf("%s",s[i]);
}
int x,y;
char print[8][8];
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
print[i][j]=s[i][j];
}
}
scanf("%d%d",&x,&y);
char real[31];
real[0]=print[x][y];
scanf("%s",move);
int j=1;
for(int i=0;move[i]!='\0';i++)
{
switch(move[i])
{
case '1':
x=x-1;
y=y-2;
real[j]=print[x][y];
j++;
break;
case '2':
x=x-2;
y=y-1;
real[j]=print[x][y];
j++;
break;
case '3':
x=x-2;
y=y+1;
real[j]=print[x][y];
j++;
break;
case '4':
x=x-1;
y=y+2;
real[j]=print[x][y];
j++;
break;
case '5':
x=x+1;
y=y+2;
real[j]=print[x][y];
j++;
break;
case '6':
x=x+2;
y=y+1;
real[j]=print[x][y];
j++;
break;
case '7':
x=x+2;
y=y-1;
real[j]=print[x][y];
j++;
break;
case '8':
x=x+1;
y=y-2;
real[j]=print[x][y];
j++;
break;
}
}
for(int i=0;i<strlen(real)+1;i++)
{
printf("%c",real[i]);
}
}
或者改为这样
#include<stdio.h>
#include<string.h>
int main()
{
char a[8][9];
for(int i=0;i<8;i++)
{
scanf("%s",a[i]);
}
int x,y;
scanf("%d%d",&x,&y);
char move[31];
char print[31]={'0'};//若不初始化,则在最后打印的时候会有垃圾值,需打印strlen(print)-1
int j=1;
scanf("%s",move);
print[0]=a[x][y];
for(int i=0;i<strlen(move);i++)
{
switch (move[i])
{
case '1':
x--;
y=y-2;
print[j]=a[x][y];
j++;
break;
case '2':
x-=2;
y--;
print[j]=a[x][y];
j++;
break;
case '3':
x-=2;
y++;
print[j]=a[x][y];
j++;
break;
case '4':
x--;
y+=2;
print[j]=a[x][y];
j++;
break;
case '5':
x++;
y+=2;
print[j]=a[x][y];
j++;
break;
case '6':
x+=2;
y++;
print[j]=a[x][y];
j++;
break;
case '7':
x+=2;
y--;
print[j]=a[x][y];
j++;
break;
case '8':
x++;
y-=2;
print[j]=a[x][y];
j++;
break;
}
}
for(int i=0;i<strlen(print);i++)
{
printf("%c",print[i]);
}
return 0;
}