Untitled

 avatar
unknown
plain_text
3 years ago
1.5 kB
6
Indexable
#include <stdio.h>
char A[50][50];
void B(int n, int m);
void C(int n);
int N,M;
int main(void){
    int a=0;

    scanf("%d %d",&N,&M);
    for(int n=1;n<=N;n++){
            scanf("%s",A[n]);
        
    }
    for(int m=0;m<M;m++){
            A[N+1][m]='x';
        
    }


    for(int n=N;n>=1;n--){
        for(int m=0;m<M;m++){
           B(n,m);
        }
    }

    for(int n=N;n>=1;n--){
        a=0;
        for(int m=0;m<M;m++){
            if(A[n][m]=='x'){
                a++;
            }
        }
        if(a==M){
            for(int m=0;m<M;m++){
                A[n][m]='.';
            } 
        }
    }

    for(int n=N;n>=1;n--){
        C(n);
    }

    for(int n=1;n<=N;n++){
        for(int m=0;m<M;m++){
           printf("%c",A[n][m]);
        }
        printf("\n");
    }

    return 0;
}
void B(int n, int m){
    if(A[n][m]=='o' && A[n+1][m]=='.'){
        A[n][m]='.';
        A[n+1][m]='o';
        B(n+1,m);
    }
    else if(A[n][m]=='o' && A[n+1][m]=='x'){
        A[n][m]='x';
    }
}
void C(int n){
    int b=0,c=0;
    for(int m=0;m<M;m++){
        if(A[n][m]=='x'){
            b++;
        } 
        if(A[n+1][m]=='.'){
            c++;
        } 
    }
    if(b!=0 && c==M){
        for(int m=0;m<M;m++){
        A[n+1][m]=A[n][m];
        }
        for(int m=0;m<M;m++){
        A[n][m]='.';
        }
        C(n+1);
    }
}

Editor is loading...