第三次机考(2018)C. 跳马

因为坐标主函数和子函数都要用,索性定义成全局变量方便交流
思路:二维数组读取棋盘——一维数组读入指令集——遍历指令集改变坐标,并输出坐标在棋盘中的对应字符
值得注意的是读取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

    原文作者:骑士周游问题
    原文地址: https://blog.csdn.net/weixin_43873801/article/details/85197676
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞