Uva227-Puzzle-谜题

来源:互联网 发布:instagram软件下载 编辑:程序博客网 时间:2024/06/07 00:35

题目链接https://vjudge.net/problem/UVA-227

类似于推箱子游戏,问你推完之后是什么样子。中途有非法操作比方说推到墙了继续推就输出错误信息。

二维数组的模拟,要注意细节。

1、读入一行字符。这里用的是cin.getline(),其语法为:cin.getline(字符指针(char*),字符个数N(int),结束符(char));

如果用string.h里面的getline的话,比方说getline(cin,str),存放到string类型的str中,这个一般用于读取整行的string,比如读取文件中。这里方便字符操作用cin.getline。


链接两篇文章,做深入了解。cin.getline、getline和gets的区别http://blog.csdn.net/ysf13579/article/details/23447945

C++中getline()、gets()等函数的用法 http://blog.csdn.net/JIEJINQUANIL/article/details/50802902

2、读取一行的操作,结束标识符\0的处理。这一题中可能读取一行为“POIU空格+回车”或者“POIU回车”或者“POIU空格+空格+回车”。。。有点无语。还有注意输出格式,仔细模拟。

#include<stdio.h>#include<iostream>#include<string.h>#include<ctype.h>using namespace std;int main(){    char z,pan[10][10];    int num=0,i=0,j=0,x=0,y=0,flag=1,count=0;    while(1){        for(int i=0;i<5;i++){            cin.getline(pan[i],10);//注意此函数的用法            if(pan[i][0]=='Z') return 0;            if(pan[i][4]=='\0') pan[i][4]=' ';//cin.getline()函数自动在结尾处添加结束标志'\0'        }        for(int i=0;i<5;i++){            for(int j=0;j<5;j++){                if(pan[i][j]==' '){x=i,y=j;}            }        }        //printf("x=%d y=%d\n",x,y);        while(~scanf("%c",&z)){            if(z=='A'){                if(x>=1){pan[x][y]=pan[x-1][y];x=x-1;}                else flag=0;            }else if(z=='B'){                if(x<=3){pan[x][y]=pan[x+1][y];x=x+1;}                else flag=0;            }else if(z=='L'){                if(y>=1){pan[x][y]=pan[x][y-1];y=y-1;}                else flag=0;            }else if(z=='R'){                if(y<=3){pan[x][y]=pan[x][y+1];y=y+1;}                else flag=0;            }else if(z=='0') break;        }        getchar();//注意上面'ABLR0'之后的回车,消去回车        if(count++) printf("\n");        printf("Puzzle #%d:\n",count);        if(flag){            pan[x][y]=' ';            for(int i=0;i<5;i++){                for(int j=0;j<5;j++){                    if(j==4) printf("%c\n",pan[i][j]);                    else printf("%c ",pan[i][j]);                }            }        }else{            printf("This puzzle has no final configuration.\n");            /*for(int i=0;i<5;i++){                for(int j=0;j<5;j++){                    if(j==4) printf("%c\n",pan[i][j]);                    else printf("%c ",pan[i][j]);                }            }*/        }        num=0,x=0,y=0,flag=1;        memset(pan,' ',sizeof(pan));    }    return 0;}


原创粉丝点击