您的位置:首页 > 其它

UVA227 Puzzle (字符串题)

2015-02-03 14:07 411 查看
代码非常清晰,考虑到所有的情况

学习这种写法

#include<stdio.h>
#include<string.h>
char str[10][10], Deal[3000];
char ch;
int ErrorFlag;
int x,y;
int Flag;
int main()
{
    Flag=0;
    while( (gets(str[0])) != NULL && strcmp(str[0],"Z") ){
        ErrorFlag = 0;
        for(int j = 0; j < strlen(str[0]); j++)
            if(str[0][j] == ' ')
            {
                x=0;
                y=j;
            }
        for(int i = 1; i < 5; i++ )
        {
            gets(str[i]);
            for(int j = 0; j < strlen(str[i]); j++)
                if(str[i][j] == ' ')
                {
                    x=i;
                    y=j;
                }
        }
        while(gets(Deal) != NULL)
        {
            if(ErrorFlag == 0)
            {
                for(int i = 0 ; i < strlen(Deal); i++)
                {
                    if(Deal[i] == 'A')
                    {
                        if(x == 0)
                        {
                            ErrorFlag = 1;
                            break;
                        }
                        ch = str[x][y];
                        str[x][y] = str[x-1][y];
                        str[x-1][y] = ch;
                        x--;
                    }
                    if(Deal[i] == 'B')
                    {
                        if(x == 4)
                        {
                            ErrorFlag = 1;
                            break;
                        }
                        ch = str[x][y];
                        str[x][y] = str[x+1][y];
                        str[x+1][y] = ch;
                        x++;
                    }
                    if(Deal[i] == 'R')
                    {
                        if(y == 4)
                        {
                            ErrorFlag = 1;
                            break;
                        }
                        ch = str[x][y];
                        str[x][y] = str[x][y+1];
                        str[x][y+1] = ch;
                        y++;
                    }
                    if(Deal[i] == 'L')
                    {
                        if(y == 0)
                        {
                            ErrorFlag = 1;
                            break;
                        }
                        ch = str[x][y];
                        str[x][y] = str[x][y-1];
                        str[x][y-1] = ch;
                        y--;
                    }
                }
            }
            if(Deal[strlen(Deal) - 1] == '0') break;
        }
        if(Flag)
            printf("\n");
        printf("Puzzle #%d:\n", ++Flag);
        if(ErrorFlag)
        {
            printf("This puzzle has no final configuration.\n");
            continue;
        }
        for(int i = 0; i < 5; i++)
        {
            for(int j=0; j < 5; j++)
            {
                if(j)
                    printf(" ");
                printf("%c", str[i][j]);
            }
            printf("\n");
        }
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: