uva227 puzzle

来源:互联网 发布:写作起名软件 编辑:程序博客网 时间:2024/05/22 04:51
#includeint main(){    int x,y,cnt=0;    char s[5][6],c;    while(true){    cnt++;    for(int i=0;i<5;i++){        for(int j=0;j<5;j++){            scanf("%c",&s[i][j]);                if(s[i][0]=='Z'){                    return 0;                }        }        c=getchar();        s[i][5]='\0';    }    int fg=1;    for(x=0;x<5;x++){        for(y=0;y<5;y++){            if(s[x][y]==' '){                fg=0;                break;            }        }        if(fg==0)break;    }    fg=1;    while((c=getchar())!='0'){        if(c=='A'){            if(x==0) {                fg=0;                continue;            }            else {                s[x][y]=s[x-1][y];                s[x-1][y]=' ';                x-=1;            }        }         if(c=='B'){            if(x==4) {               fg=0;                continue;            }            else {                s[x][y]=s[x+1][y];                s[x+1][y]=' ';                x+=1;            }        }         if(c=='L'){            if(y==0) {               fg=0;                continue;            }            else {                s[x][y]=s[x][y-1];                s[x][y-1]=' ';                y-=1;            }        }         if(c=='R'){            if(y==4) {                fg=0;                continue;            }            else {                s[x][y]=s[x][y+1];                s[x][y+1]=' ';                y+=1;            }        }    }     c=getchar();//IMPORTANT    if(fg){        if(cnt!=1)            putchar('\n');        printf("Puzzle #%d:\n",cnt);        for(int i=0;i<5;i++){            for (int j=0;j<5;j++){            putchar(s[i][j]);            if(j!=4)                putchar(' ');        }        printf("\n");    }    }    else{            if(cnt!=1)            putchar('\n');        printf("Puzzle #%d:\n",cnt);                printf("This puzzle has no final configuration.\n");    }    }    return 0;}

笔记:
1 对输入的移动要求可以占多行这个特点,利用while((c=getchar()!='0')把ABRL之外的字符都吞掉了而不受影响;
2 输出格式很严格,如正确输出congifuration时每个字母之间有一个空格,暗示着每行第一个字母前和最后一个字母后都没有空格;每个输出之间要空一行,但最后一个输出之后不能有空行,这就需要通过设置一个first变量(本代码中是直接利用了cnt)控制不是first的有效答案输出前输出一个空行。