#14096: 用C寫的,可供參考,如果程式碼不懂可問我


HuangNO1 (雷姆醬)

學校 : 中南大学
編號 : 60967
來源 : [103.156.242.195]
最後登入時間 :
2023-12-03 15:57:20
a015. 矩陣的翻轉 | From: [36.227.161.239] | 發表日期 : 2018-06-12 21:37

#include <stdio.h>

void action_1 ( int s[][ 100 ] , int *a , int *b ) // 順時針旋轉
{
    int s1_cpy[ 100 ][ 100 ] , i , j ;
    int A ;
    for ( i = 0 ; i < *b ; i ++ ){
        A = *a - 1 ;
        for ( j = 0 ; j < *a ; j ++ ){
            s1_cpy[ i ][ j ] = s[ A ][ i ] ;
            A-- ;
        }
    }
    for ( i = 0 ; i < *b ; i ++ )
        for ( j = 0 ; j < *a ; j ++ )
            s[ i ][ j ] = s1_cpy[ i ][ j ] ;
    int temp = *a ; *a = *b ; *b = temp ;
    }
void action_2 ( int s[][ 100 ] , int a , int b )  // 上下翻轉
{
    int s2_cpy[ 100 ][ 100 ] , i , j , A = a - 1 ;
    for ( i = 0 ; i < a ; i ++ ){
        for ( j = 0 ; j < b ; j ++ )
            s2_cpy[ i ][ j ] = s[ A ][ j ] ;
        A-- ;
    }
    for ( i = 0 ; i < a ; i ++ )
        for ( j = 0 ; j < b ; j ++ )
            s[ i ][ j ] = s2_cpy[ i ][ j ] ;
}
int main()
{
    int a , b , i , j ;
    while ( scanf ( "%d %d" , &a , &b ) != EOF ){
        int s[ 100 ][ 100 ] = {} ;
        for ( i = 0 ; i < a ; i ++ )
            for ( j = 0 ; j < b ; j ++ )
                scanf ( " %d" , &s[ i ][ j ] ) ;
        action_2 ( s , a , b ) ;      // 注意 一定是先翻轉再旋轉
        action_1 ( s , &a , &b ) ;
        for ( i = 0 ; i < a ; i ++ ){
            for ( j = 0 ; j < b - 1 ; j ++ )
                printf ( "%d " , s[ i ][ j ] ) ;
            printf ( "%d\n" , s[ i ][ b - 1 ] ) ;
        }
    }
    return 0 ;
}

 

執行結果:

AC  0ms  128kb

 
#14097: Re:用C寫的,可供參考,如果程式碼不懂可問我


HuangNO1 (雷姆醬)

學校 : 中南大学
編號 : 60967
來源 : [103.156.242.195]
最後登入時間 :
2023-12-03 15:57:20
a015. 矩陣的翻轉 | From: [36.227.161.239] | 發表日期 : 2018-06-12 21:46

 

這題的進階題可參考 APCS 105年3/5 的實作 第二

P.S其實這題也可左右翻轉  指示要變成 先旋轉再翻轉

 
ZeroJudge Forum