2018计算导论与程序设计习题课九 C.九宫格密码

果然这种一个坐标变来变去的还是用全局变量做起来最舒服。
每次从operation[]里读入一个操作符,然后打印x,y对应的值。

#include 
int x,y;
void readPassword();
void move(char);
int main(int argc, char const *argv[])
{
     
	scanf("%d%d",&x,&y);
	getchar();
	char operation[9];
	gets(operation);
	int i;

	readPassword();
	for(i=0;i<strlen(operation);i++)
	{
     
		move(operation[i]);
		readPassword();
	}
	return 0;
}

void readPassword()
{
     	
	int r;
	switch(x)
	{
     
		case 0:
			switch(y)
			{
     
				case 0:r=1;break;
				case 1:r=2;break;
				case 2:r=3;break;
			}break;
		case 1:
			switch(y)
			{
     
				case 0:r=4;break;
				case 1:r=5;break;
				case 2:r=6;break;
			}break;
		case 2:
			switch(y)
			{
     
				case 0:r=7;break;
				case 1:r=8;break;
				case 2:r=9;break;
			}
	}
	printf("%d",r);
}

void move(char ch)
{
     
	switch(ch-'0')
	{
     
		case 1:x++;y--;break;
		case 2:x++;break;
		case 3:x++;y++;break;
		case 4:y--;break;
		case 6:y++;break;
		case 7:x--;y--;break;
		case 8:x--;break;
		case 9:x--;y++;
	}
}

题目描述
随着智能手机的普及, 各种应用也层出不穷, 安卓的九宫格密码就是其中之一。 安卓的九宫格密码可以看做是3x3点阵中的一条路径, 只要你
在画的时候, 不经过重复的点, 同时不跳过途中必须要经过的点, 那么这条路径几乎是无所不能的。
现在就请你写一段程序将这条路经转换成相应的密码。 我们这里做一个限制, 就是我们在画这条路经时, 从一个点到另一个点, 无论是横向还是纵向每次最多移动一个格. 也就是说如果我们按c语言的习惯用(0, 0) 表示左上角的点, 那么从它出发可能的移动只有三个, 即可以移动到(0,1) (1,0) 和 (1,1) 三个点, 而不能像真实的九宫格密码那样可以移动到 (1,2) (2,1) 等点。

输入格式
为两行, 第一行为两个整数, 代表起始点坐标, 其中(0,0) 代表左上角, (0,1) 代表第一行中间, (0,2) 代表右上角, (1, 0) 代表第二行最左等等,其余以此规律类推.第二行为长度最长为8的字符串,代表每次移动的方向。字符串中仅可能含有’1,‘2’,‘3’,‘4’,‘6’7’,‘8’'9’八种字符,其中’1’代表向左下移动、'2’代表向下移动、'3’代表向右下移动,'4’代表向左移动,'6’代表向右移动、'7代表向左上移动、'8’代表向上移动、'9’代表向右上移动。 输入保证合法, 不存在移到九宫格以外的可能。

输出格式
仅一行, 为上述输入的路径所代表的密码。 其中每个点所代表的数字同手机键盘, 也就是说(0,0) 点为1, (0,1) 点为2, (0,2) 点为3,(1,0)点为4等等。
输入样例
input 1:
00
661166
input 2:
20
66772938
输出样例
output1:
1235789
output 2:
789514263

你可能感兴趣的:(Excited,OJ)