UVa 10016 - Flip-Flop the Squarelotron

    xiaoxiao2021-12-14  19

    題目:給定一個N*N的矩陣,從外向里依次以圈為單位,有四種操作對應其中的圈數據: 

                上下翻轉、左右翻轉、主對角線翻轉、次對角線翻轉;輸入個圈的操作,求變化后結果。

    分析:模擬。直接定義四個函數找到對應關係,模擬即可。

    說明:UVa又上不去了╮(╯▽╰)╭。

    #include <stdio.h> int squarelotron[101][101]; void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void rotate_upside_down(int n, int ring) { for (int i = ring; i <= n-1-ring; ++ i) { swap(&squarelotron[ring][i], &squarelotron[n-1-ring][i]); } for (int i = ring+1; i <= n/2-1; ++ i) { swap(&squarelotron[i][ring], &squarelotron[n-1-i][ring]); swap(&squarelotron[i][n-1-ring], &squarelotron[n-1-i][n-1-ring]); } } void rotate_left_rigt(int n, int ring) { for (int i = ring; i <= n-1-ring; ++ i) { swap(&squarelotron[i][ring], &squarelotron[i][n-1-ring]); } for (int i = ring+1; i <= n/2-1; ++ i) { swap(&squarelotron[ring][i], &squarelotron[ring][n-1-i]); swap(&squarelotron[n-1-ring][i], &squarelotron[n-1-ring][n-1-i]); } } void rotate_inverse_diagonal(int n, int ring) { for (int i = ring; i <= n-2-ring; ++ i) { swap(&squarelotron[ring][i], &squarelotron[n-1-i][n-1-ring]); } for (int i = ring+1; i <= n-2-ring; ++ i) { swap(&squarelotron[n-1-ring][n-1-i], &squarelotron[i][ring]); } } void rotate_main_diagonal(int n, int ring) { for (int i = ring+1; i <= n-1-ring; ++ i) { swap(&squarelotron[ring][i], &squarelotron[i][ring]); } for (int i = ring+1; i <= n-2-ring; ++ i) { swap(&squarelotron[n-1-ring][i], &squarelotron[i][n-1-ring]); } } void output(int n) { for (int i = 0; i < n; ++ i) { printf("%d",squarelotron[i][0]); for (int j = 1; j < n; ++ j) { printf(" %d",squarelotron[i][j]); } puts(""); } } int main() { int M, N, T, C; while (~scanf("%d",&M)) while (M --) { scanf("%d",&N); for (int i = 0; i < N; ++ i) { for (int j = 0; j < N; ++ j) { scanf("%d",&squarelotron[i][j]); } } int R = (N+1)/2; for (int i = 0; i < R; ++ i) { scanf("%d",&T); for (int j = 0; j < T; ++ j) { scanf("%d",&C); switch(C) { case 1: rotate_upside_down(N, i); break; case 2: rotate_left_rigt(N, i); break; case 3: rotate_main_diagonal(N, i); break; case 4: rotate_inverse_diagonal(N, i); break; default: break; } //output(N); } } output(N); } return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-970597.html

    最新回复(0)