当前位置:编程学习 > C/C++ >>

C翻转

前言
北邮的上机题我见一道就必须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];  
            }  
        }  
    }  
}  
补充:软件开发 , C语言 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,