实现谜题的空格字符换位

有一个5*5的网格,其中恰好有一个格子是空的,其他格子各有一个字母。一共有4种指令:A,B,L,R,分别表示把空格上、下、左右的相邻字母移到空格种。输入初始网格和指令序列(以数字0结束),输出指令执行完毕后的网格。如果有非法指令,应输出“This puzzle has no final configuration.”。注意指令要以0结束输出,例如:AAALQRR0

#include<stdio.h>

int main()

{

char a[5][5], b[100]; int n, m;

for (int i = 0; i < 5; i++)

for (int j = 0; j < 5; j++)

{

a[i][j] = getchar();//输入字母矩阵

}

for (int i = 0; i < 5; i++)//打印字母矩阵,顺手找空格位置(n,m)

{

for (int j = 0; j < 5; j++)

{

printf("%c ", a[i][j]); if (a[i][j] == ' ') { n = i; m = j; }

}printf("\n");

}

scanf("%[^0]", b);//输入除了0以外的指令,输入0结束输出。

for (int t = 0; t < strlen(b); t++)//读取指令,例如A就会让空格被赋值为即将被移动的位置的

{//字符,再将需移动到位置字符赋值为空格,即可实现换位。且字符(n,m)始终指向空格位置。

if (b[t] == 'A' && n != 0) { a[n][m] = a[n - 1][m]; a[--n][m] = ' '; }

else if (b[t] == 'B' && n != 4) { a[n][m] = a[n + 1][m]; a[++n][m] = ' '; }

else if (b[t] == 'L' && m != 0) { a[n][m] = a[n][m - 1]; a[n][--m] = ' '; }

else if (b[t] == 'R' && m != 4) { a[n][m] = a[n][m + 1]; a[n][++m] = ' '; }

else

printf("This puzzle no final configuration\n");

return 0;

}for (int i = 0; i < 5; i++)//打印换位的字母矩阵。

{

for (int j = 0; j < 5; j++)

printf("%c ", a[i][j]);

printf("\n");

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值