#20594: 求解!!知道問題後還是錯!!


qwe821526@gmail.com (陳姵霖)

學校 : 不指定學校
編號 : 114814
來源 : [114.39.172.253]
最後登入時間 :
2020-02-22 14:54:54
b965. 2. 矩陣轉換 -- 2016年3月apcs | From: [114.39.23.237] | 發表日期 : 2020-02-11 15:21

爬文後,發現自己問題在多空白鍵

但改正後仍錯誤cry

需要有人幫忙看

我是寫C語言的

希望有人幫忙謝謝^-^

 

#include <stdio.h>
#include <stdlib.h>
int f1(int,int); //翻轉
int f2(int,int); //旋轉

int after[10][10]; //最後的陣列
int before[10][10]; //before
int i=0,j=0;
int flag=0,count=0;//表示翻轉後,R C互換,存取表示變數 /表示旋轉幾次

int main()
{
//輸入資訊
int R,C,M; //列 行 動作數量
//int i=0,j=0;
scanf("%d %d %d",&R,&C,&M);
for(i=0;i<R;i++){
for(j=0;j<C;j++){
scanf("%d",&after[i][j]);//before[列][行]
}
}
int m1[10];
for(i=0;i<M;i++){
scanf("%d",&m1[i]);
if(m1[i]==0){
count++;
}
}
for(i=M-1;i>=0;i--){
if(m1[i]==1&&flag==0){
f1(R,C);
} else if(m1[i]==1&&flag==1){
f1(C,R);
}else if(m1[i]==0&&flag==0){
f2(R,C);
flag=1;
}else{
f2(C,R);
flag=0;
}
}

//輸出
if(count==0||count%2==0){
printf("%d %d\n",R,C);
for(i=0;i<R;i++){ //翻轉輸出
for(j=0;j<C;j++){
printf("%d",after[i][j]); //before[列][行]
if(j!=C-1){
printf(" ");
}
}
printf("\n");
}
}else{
printf("%d %d\n",C,R);
for(i=0;i<C;i++){ //翻轉輸出
for(j=0;j<R;j++){
printf("%d ",after[i][j]); //before[列][行]
if(j!=C-1){
printf(" ");
}
}
printf("\n");
}
}

return 0;
}


int f1(int R,int C){
int t;
for(i=0;i<R;i++){
for(j=0;j<(C/2);j++){
t=after[i][C-1-j];
after[i][C-1-j]=after[i][j];
after[i][j]=t;

before[i][j]=after[i][j];
before[i][C-1-j]=after[i][C-1-j];

}
}
}

int f2(int R,int C){
for(i=0;i<C;i++){
for(j=0;j<R;j++){
before[i][j]=after[j][C-1-i];
}
}
for(i=0;i<C;i++){
for(j=0;j<R;j++){
after[i][j]=before[i][j];
}
}
}

 
#20652: Re:求解!!知道問題後還是錯!!


qwe821526@gmail.com (陳姵霖)

學校 : 不指定學校
編號 : 114814
來源 : [114.39.172.253]
最後登入時間 :
2020-02-22 14:54:54
b965. 2. 矩陣轉換 -- 2016年3月apcs | From: [114.39.118.219] | 發表日期 : 2020-02-16 15:30

後來我已經寫好

而且測試通過且AC

但送出解答都NA

 

我是寫C語言的

希望有人幫忙謝謝^-^

#include <stdio.h>

#include <stdlib.h>

void f1(int,int); //翻轉

void f2(int,int); //旋轉

 

int after[10][10];  //最後的陣列

int before[10][10]; //before

int i=0,j=0;

int flag=0,count=0;//表示翻轉後,R C互換,存取表示變數 /表示旋轉幾次

 

void main()

{

    //輸入資訊

    int R,C,M; //列 行 動作數量

    int i=0,j=0;

    scanf("%d %d %d",&R,&C,&M);

    for(i=0;i<R;i++){

        for(j=0;j<C;j++){

            scanf("%d",&after[i][j]);//before[列][行]

        }

    }

    int m1[10];

    for(i=0;i<M;i++){

        scanf("%d",&m1[i]);

        if(m1[i]==0){

            count++;

        }

    }

    for(i=M-1;i>=0;i--){

       if(m1[i]==1&&flag==0){

        f1(R,C);

       } else if(m1[i]==1&&flag==1){

        f1(C,R);

       }else if(m1[i]==0&&flag==0){

        f2(R,C);

        flag=1;

       }else{

        f2(C,R);

        flag=0;

       }

    }

 

    //輸出

    if(count==0||count%2==0){

        printf("%d %d\n",R,C);

    for(i=0;i<R;i++){ //翻轉輸出

        for(j=0;j<C;j++){

            printf("%d",after[i][j]); //before[列][行]

         if(j!=C-1){

         printf(" ");

         }

        }

        printf("\n");

     }

    }else{

        printf("%d %d\n",C,R);

    for(i=0;i<C;i++){ //翻轉輸出

        for(j=0;j<R;j++){

            printf("%d",after[i][j]); //before[列][行]

         if(j!=R-1){

         printf(" ");

         }

        }

        printf("\n");

     }

    }

 

}

 

 

    void f1(int R,int C){

        int t;

    for(i=0;i<(R/2);i++){

        for(j=0;j<C;j++){

            t=after[R-1-i][j];

            after[R-1-i][j]=after[i][j];

            after[i][j]=t;

 

            before[i][j]=after[i][j];

     }

    }

   }

 

     void f2(int R,int C){

     for(i=0;i<C;i++){

        for(j=0;j<R;j++){

        before[i][j]=after[j][C-1-i];

      }

     }

     for(i=0;i<C;i++){

        for(j=0;j<R;j++){

        after[i][j]=before[i][j];

      }

     }

   }

 

 
ZeroJudge Forum