UVa227 PUZZLE accepted code

来源:互联网 发布:tensorflow linux cuda 编辑:程序博客网 时间:2024/06/16 10:04

原题就不贴了,主要意图是输入有一个空格存在的5*5数组,输入带有转行符的字符串对空格进行上下左右控制,以0为结束,输出移动后的数组

这道题是需要细心的,该注意的地方有以下几点:

1、输入格式比较琐碎,因为有空格所以不支持scanf,使用gets函数接受每行数据包括空格,使用scanf函数接受包含转行符的字符串

2、注意每个变量的作用域,在循环一次之后要保证你的flag、nx、ny等变量还能回到初始状态,不然容易出现puzzle2不符合要求的情况

3、防止出现runtime error,将数组定义放置在main函数外面

4、重点是空格位置的变换。

这道题编完还是有很多收获的,下面给出源码

#include <iostream>using namespace std;char a[5][7];    char b[100];int main(){int num = 0;while(gets(a[0])){if(a[0][0]=='Z') break;for(int i =1;i<5;i++){gets(a[i]);}    int bx=0;    int by = 0;for(int m =0;m<5;m++){ for(int n = 0;n<5;n++){if(a[m][n]==' '){bx = m;by = n;break;}}}int length = 0;while(scanf("%c",&b[length])==1){if(b[length]!='0') length++;else break;}b[length] = 0;getchar();//这里等待用户按回车 int flag = 0;int nx = bx;int ny = by;for(int i =0;b[i];i++){if(b[i]=='A'){nx = bx-1;            ny = by;}else if(b[i]=='B'){nx = bx+1;ny = by;}else if(b[i]=='L'){ny = by-1;nx = bx;}else if(b[i]=='R'){ny = by+1;nx = bx;}if(nx<0||nx>4||ny<0||ny>4){flag=1;break;}else{a[bx][by] = a[nx][ny];a[nx][ny] = ' ';bx = nx;by = ny;}}if(num ++) printf("\n");cout<<"Puzzle #"<<num<<":"<<endl;if(flag){printf("This puzzle has no final configuration.\n");}else{for(int i =0;i<5;i++){for(int j =0;j<5;j++){if(j==4){cout<<a[i][j]<<endl;}else{cout<<a[i][j]<<" ";}}    }}     }return 0;}


1 0
原创粉丝点击