ACM复习(49)11156 旋转矩阵一

Description
某天,tianjiewang在搭火车,由于他搭车后容易晕车,突然他想到了矩阵的旋转。
给一个3*3的矩阵,矩阵旋转是按顺时针的
例如

       1 2 3          7 4 1
       4 5 6 转一次是  8 5 2 
       7 8 9          9 6 3

       1 2 3          9 8 7
       4 5 6 转两次是  6 5 4
       7 8 9          3 2 1

问给一个n*m 的矩阵,问顺时针旋转k次后,求旋转后的矩阵是?(1<=n,m,k<=100),由于正在搭火车,tianjiewang的头很晕,
不知怎样做,现在他向你求助,你可以帮助他吗?

(出题人tianjiewang)

输入格式
第一行输入 n,m,k;
第二行到第n + 1行,每行有m 个数,每个数的取值范围是(1<=Aij<=100)

输出格式
输出n*m矩阵顺时针旋转k次后的矩阵

输入样例
3 3 1
1 2 3
4 5 6
7 8 9

输出样例
7 4 1
8 5 2
9 6 3


解题思路

水题。。

#include<stdio.h>
int main()
{
    int n, m, k, i, l;
    scanf("%d%d%d",&n, &m, &k);
    int num[n][m];

    for(i = 0; i < n; i ++)
        for(l = 0;l < m; l ++)
            scanf("%d",&num[i][l]);

    if(k % 4 == 0)
    {
         for(i = 0; i < n; i ++)
         {  
            for(l = 0; l < m; l ++)
                printf("%d ",num[i][l]);
            printf("\n"); 
         }
    }
    else if(k % 4 == 1)
    {
        for(i = 0; i < m; i ++)
        {
            for(l = n - 1;l >= 0; l --)
                printf("%d ",num[l][i]);
            printf("\n");
        }
    }
    else if(k % 4 == 2)
    {
        for(i = n - 1; i >= 0; i --)
        {
            for(l = m - 1; l >= 0; l --)
                printf("%d ",num[i][l]); 
            printf("\n");
        }
    }
    else
    {
        for(i = m - 1; i >= 0;i --)
        {
            for(l = 0; l < n; l ++)
                printf("%d ",num[l][i]);
            printf("\n");
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/sinat_34200786/article/details/79876056
今日推荐