如何旋转矩阵?C

亚历克斯·非熟练

我希望矩阵向右旋转。它适用于正方形矩阵,但我也应适用于非正方形矩阵。

我试过旋转它,但我想不出一种方法使其在非方形矩阵上工作。

#include <stdio.h>

#define x 7
#define y 7

int build() {
    int i = 0, k = 0;
    int matrix[x][y];

    for (i = 0; i < x; ++i) {
        for (k = 0; k < y; ++k) {
            matrix[i][k] = i;
        }
    }
    for (i = 0; i < x; ++i) {
        for (k = 0; k < y; ++k) {
            printf("\t%d", matrix[k][i]);
        }
        printf("\n");
    }
    return matrix[i][k];
}

int turn() 
{
    int i = 0, k = 0;
    int matrix[x][y];

    for (i = 0; i < x; ++i) {
        for (k = 0; k < y; ++k) {
            matrix[i][k] = i;
        }
    }
    for (i = 0; i < x; ++i) {
        for (k = 0; k < y; ++k) {
            printf("\t%d", matrix[i][k]);
        }
        printf("\n");
    }
}

int main()
{
    build();
    printf("\t\n");
    turn();
}

我希望它适用于不同的变量,例如x = 5和y = 7。

我的想法是将矩阵旋转90度。

0 0 0 0

1 1 1 1

2 2 2 2

2 1 0

2 1 0

2 1 0

2 1 0

ind

只需对您的代码进行一些修改

#include <stdio.h>
#define x 3 
#define y 4
int build() {
    int i = 0, k = 0;
    int matrix[x][y];

    for (i = 0; i < x; ++i) {
            for (k = 0; k < y; ++k) {
                    matrix[i][k] = i;
            }
    }
    for (i = 0; i < x; ++i) {
            for (k = 0; k < y; ++k) {
                    printf("\t%d", matrix[i][k]);
            }
            printf("\n");
    }
    return matrix[i][k];} 
//for right turn you will have to modify the loop like this
int r_turn() 
{

    int i = 0, k = 0;
    int matrix[x][y];
    for(i=0; i<y; i++)     //for outer loop, take y, because you're rotating 
                           //loop , and y will come before x
    {
            for(k=x-1; k>=0; k--)    //thereby, x goes after y 
            {
                    matrix[k][i] = k;
            } 
    }
    for(i=0; i<y; i++)          //printing matrix in the same way we wrote
    {
            for(k=x-1; k>=0; k--)         //here, k will start from k because 
                                          //index starts from 0
            {
                    printf("\t%d", matrix[k][i]);
            }
            printf("\n");
    }
}
int main()
{
    build();
    printf("\t\n");
    r_turn();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章