前言 北郵的上機題我見一道就必須ac一道,當年被刷的場景和心情一直是這一年多我拼的動力之一,挺好! 題目描述: 首先輸入一個5 * 5的數組,然後輸入一行,這一行有四個數,前兩個代表操作類型,後兩個數x y代表需操作數據為以x y為左上角的那幾個數據。 操作類型有四種: 1 2 表示:90度,順時針,翻轉4個數 1 3 表示:90度,順時針,翻轉9個數 2 2 表示:90度,逆時針,翻轉4個數 2 3 表示:90度,逆時針,翻轉9個數 輸入: 輸入有多組數據。 每組輸入一個5 * 5的數組,然後輸入一行,這一行有四個數,前兩個代表操作類型,後兩個數x y代表需操作數據為以x y為左上角的那幾個數據。 輸出: 輸出翻轉後的數組。 樣例輸入: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 3 1 1 樣例輸出: 11 6 1 4 5 12 7 2 9 10 13 8 3 14 15 16 17 18 19 20 21 22 23 24 25 考察重點 主要是考察矩陣的翻轉,可以參考我之前的一篇博客:http://blog.csdn.net/zinss26914/article/details/8514920 AC代碼 [cpp] #include <stdio.h> #include <stdlib.h> void turn904(int (*a)[5], int (*b)[5], int row, int column, int type); void turn909(int (*a)[5], int (*b)[5], int row, int column, int type); int main() { int i, j, t1, t2, row, column; int a[5][5], b[5][5]; while(scanf("%d", &a[0][0]) != EOF) { //接收矩陣 for(i = 0; i < 5; i ++) { for(j = 0; j < 5; j ++) { if(i == 0 && j == 0) { continue; }else { scanf("%d", &a[i][j]); } } } //接收旋轉參數 scanf("%d%d%d%d", &t1, &t2, &row, &column); row -= 1; column -= 1; //矩陣旋轉 if(t1 == 1 && t2 == 2) { //90度4個數 turn904(a, b, row, column, 0); }else if(t1 == 1 && t2 == 3) { //90度9個數 turn909(a, b, row, column, 0); }else if(t1 == 2 && t2 == 2) { //逆90度4個數 turn904(a, b, row, column, 1); }else if(t1 == 2 && t2 == 3) { //逆90度9個數 turn909(a, b, row, column, 1); } //打印輸出 for(i = 0; i < 5; i ++) { for(j = 0; j < 5; j ++) { if(j == 4) { printf("%d\n", b[i][j]); }else { printf("%d ", b[i][j]); } } } } return 0; } void turn904(int (*a)[5], int (*b)[5], int row, int column, int type) { int i, j; for(i = 0; i < 5; i ++) { for(j = 0; j < 5; j ++) { if((i == row || i == row + 1) && (j == column || j == column + 1)) { switch(type) { case 0: //順時針 b[i][j] = a[2 - 1 - j][i]; break; case 1: //逆時針 b[i][j] = a[j][2 - 1 - i]; break; } }else { b[i][j] = a[i][j]; } } } } void turn909(int (*a)[5], int (*b)[5], int row, int column, int type) { int i, j; for(i = 0; i < 5; i ++) { for(j = 0; j < 5; j ++) { if((i == row || i == row + 1 || i == row + 2) && (j == column || j == column + 1 || j == column + 2)) { switch(type) { case 0: //順時針 b[i][j] = a[3 - 1 - j][i]; break; case 1: //逆時針 b[i][j] = a[j][3 - 1 - i]; break; } }else { b[i][j] = a[i][j]; } } } } /************************************************************** Problem: 1171 User: wangzhengyi Language: C Result: Accepted Time:10 ms Memory:908 kb ****************************************************************/