UVA 227 Puzzle
2016-12-26 22:43
381 查看
#include<cstdio>
#include<string.h>
char ch[6][6];
char common[1010];
char common1[1010];
int main(){
int case1=0;
while(gets(ch[0])){
if(ch[0][0]=='Z')break;
for(int i=1;i<5;i++){
gets(ch[i]);
}
int x=0,y=0;
int flag=1;//用于最终结果输出的判定
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
if(ch[i][j]==' '){
x=i;y=j;
break;
}
//将不同行的命令连接起来
memset(common,0,sizeof(common));
int ok=1;//用于退出下面一个while循环
while(true){
gets(common1);
for(int i=0;i<strlen(common1);i++){
if(common1[i]=='0'){ok=0;break;}
}
strcat(common,common1);
if(!ok)break;
}
if(case1)printf("\n");
printf("Puzzle #%d:\n",++case1);
int length=strlen(common);
for(int i=0;i<length;i++){
if(common[i]=='A'){
if(x==0){
printf("This puzzle has no final configuration.\n");
flag=0;
break;}
ch[x][y]=ch[x-1][y];
ch[x-1][y]=' ';
x=x-1;
}
else if(common[i]=='B'){
if(x==4){
printf("This puzzle has no final configuration.\n");
flag=0;
break;
}
ch[x][y]=ch[x+1][y];
ch[x+1][y]=' ';
x=x+1;
}
else if(common[i]=='L'){
if(y==0){
printf("This puzzle has no final configuration.\n");
flag=0;
break;
}
ch[x][y]=ch[x][y-1];
ch[x][y-1]=' ';
y=y-1;
}
else if(common[i]=='R'){
if(y==4){
printf("This puzzle has no final configuration.\n");
flag=0;
break;
}
ch[x][y]=ch[x][y+1];
ch[x][y+1]=' ';
y=y+1;
}
else if (common[i]=='0')break;//此处不能用换成else break;
}
if(flag)
for(int i=0;i<5;i++){
printf("%c",ch[i][0]);
for(int j=1;j<5;j++)
printf(" %c",ch[i][j]);
printf("\n");
}
}
return 0;
}
本题最主要的是数据的输入
1、用scanf和%c输入时,需要用一个getchar吃掉末尾的换行。
2、用scanf和%s输入时,遇到空格就会结束一个字符串。
3、最终选用gets输入数据(虽然不赞成,因为很有可能数据溢出)
#include<string.h>
char ch[6][6];
char common[1010];
char common1[1010];
int main(){
int case1=0;
while(gets(ch[0])){
if(ch[0][0]=='Z')break;
for(int i=1;i<5;i++){
gets(ch[i]);
}
int x=0,y=0;
int flag=1;//用于最终结果输出的判定
for(int i=0;i<5;i++)
for(int j=0;j<5;j++)
if(ch[i][j]==' '){
x=i;y=j;
break;
}
//将不同行的命令连接起来
memset(common,0,sizeof(common));
int ok=1;//用于退出下面一个while循环
while(true){
gets(common1);
for(int i=0;i<strlen(common1);i++){
if(common1[i]=='0'){ok=0;break;}
}
strcat(common,common1);
if(!ok)break;
}
if(case1)printf("\n");
printf("Puzzle #%d:\n",++case1);
int length=strlen(common);
for(int i=0;i<length;i++){
if(common[i]=='A'){
if(x==0){
printf("This puzzle has no final configuration.\n");
flag=0;
break;}
ch[x][y]=ch[x-1][y];
ch[x-1][y]=' ';
x=x-1;
}
else if(common[i]=='B'){
if(x==4){
printf("This puzzle has no final configuration.\n");
flag=0;
break;
}
ch[x][y]=ch[x+1][y];
ch[x+1][y]=' ';
x=x+1;
}
else if(common[i]=='L'){
if(y==0){
printf("This puzzle has no final configuration.\n");
flag=0;
break;
}
ch[x][y]=ch[x][y-1];
ch[x][y-1]=' ';
y=y-1;
}
else if(common[i]=='R'){
if(y==4){
printf("This puzzle has no final configuration.\n");
flag=0;
break;
}
ch[x][y]=ch[x][y+1];
ch[x][y+1]=' ';
y=y+1;
}
else if (common[i]=='0')break;//此处不能用换成else break;
}
if(flag)
for(int i=0;i<5;i++){
printf("%c",ch[i][0]);
for(int j=1;j<5;j++)
printf(" %c",ch[i][j]);
printf("\n");
}
}
return 0;
}
本题最主要的是数据的输入
1、用scanf和%c输入时,需要用一个getchar吃掉末尾的换行。
2、用scanf和%s输入时,遇到空格就会结束一个字符串。
3、最终选用gets输入数据(虽然不赞成,因为很有可能数据溢出)
相关文章推荐
- Uva 227-Puzzle 解题报告
- uva 227 Puzzle
- UVa 227 Puzzle
- 【习题3-5】 UVA - 227 Puzzle
- UVa 227, Puzzle
- UVa 227:Puzzle
- UVa227 Puzzle
- Puzzle UVA - 227
- 紫书章三习题5——UVA 227 Puzzle
- UVa - 227 - Puzzle(gets(),scanf("%c",&x))
- UVa - 227 Puzzle
- UVa 227 Puzzle
- Puzzle,ACM/ICPC World Finals 1993, UVa227
- UVA 227 - Puzzle
- (入门)uva 227 Puzzle
- UVA - 227 Puzzle
- UVA 227 Puzzle
- 算法竞赛入门经典第三章3-5 Puzzle UVA - 227
- uva227 puzzle
- 紫书章三习题5——UVA 227 Puzzle