Untitled

 avatar
unknown
plain_text
3 years ago
2.5 kB
4
Indexable
#include <stdio.h>

int main()
{
    int i,j,x,k;
    int rows,columns,distance,times;
    int found;
    char array1[42][42]={'\0'},array2[42][42]={'\0'};
    scanf("%d %d",&rows,&columns);
    for(i=0;i<rows;i++)
    {
        scanf("%s",array1[i]);
    }
    for(i=0;i<rows;i++) //把array1的x和.複製到array2,array1中的o在array2其他設成.
    {
        for(j=0;j<columns;j++)
        {
            if(array1[i][j]=='o')
            {
                array2[i][j]='.';
            }
            else
            {
                array2[i][j]=array1[i][j];
            }
        }
    }

    distance=columns;
    for(i=0;i<rows;i++) //找出array1最底層o距離x的長度
    {
        for(j=0;j<columns;j++)
        {
            if(array1[i][j]=='o' && array1[i+1][j]!='o')
            {
                x=0;
                for(k=i;k<rows;k++)
                {
                    found=0;
                    if(array1[k][j]=='x')
                    {
                        x=k-i-1;
                        found=1;
                        break;
                    }
                }
                if(!found) //如果o下面都沒有x的話
                {
                    x=k-i-1;
                }
                if(x<distance) //取最短距離
                {
                    distance=x;
                }
            }
        }
    }

    for(i=0;i<rows;i++) //將array1的o移動後的結果放到array2
    {
        for(j=0;j<columns;j++)
        {
            if(array1[i][j]=='o')
            {
                array2[i+distance][j]='x';
            }
        }
    }

    times=0;
    for(i=0;i<rows;i++) //檢測一整排都是x的情況
    {
        x=0;
        for(j=0;j<columns;j++)
        {
            if(array2[i][j]=='x')
            {
                x++;
            }
        }
        if(x==columns)
        {
            array2[i][0]='m'; //若整排都是x,將那排標記
            times++; //算總要消去的行數
        }
    }
    for(i=0;i<times;i++) //先印出消去的行數
    {
        for(j=0;j<columns;j++)
        {
            printf(".");
        }
        printf("\n");
    }
    for(i=0;i<rows;i++) //印剩下的
    {
        if(array2[i][0]!='m') //若遇到沒有標記的才印出
        {
            printf("%s\n",array2[i]);
        }
    }
    return 0;
}
Editor is loading...