因为坐标主函数和子函数都要用,索性定义成全局变量方便交流
思路:二维数组读取棋盘——一维数组读入指令集——遍历指令集改变坐标,并输出坐标在棋盘中的对应字符
值得注意的是读取n后也要用getchar()把回车吃掉,不然指令集会读取为空
由于最后一次只变化了坐标还没输出,补一个printf
#include<stdio.h>
int x,y;
void process(char);
int main()
{
char set[8][9],move[31];
int i,j;
for(i=0;i<8;i++)
gets(set[i]);
scanf("%d%d",&x,&y);
getchar();
gets(move);
for(i=0;i<strlen(move);i++)
{
printf("%c",set[x][y]);
process(move[i]);
}
printf("%c",set[x][y]);
return 0;
}
void process(char s)
{
switch(s)
{
case '1':x--;y-=2;break;
case '2':x-=2;y--;break;
case '3':x-=2;y++;break;
case '4':x--;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;
}
}
题目描述
无论在中国象棋还是国际象棋中“马”都是走“日”字的。比如我们把国际象棋的棋盘的左上角的坐标设为(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