果然这种一个坐标变来变去的还是用全局变量做起来最舒服。
每次从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