矩阵顺时针转置90度

矩阵顺时针转置90度

原 :    12,43,54,65,
           6,34,25,87,
           97,45,33,59 

 

目标:   97,6,12

           45,34,43

           33,25,54

           59,87,65

  

方法1:

思想:原矩阵的第一列 是 目标矩阵的第一行,

当原矩阵变化第col列 ,目标矩阵的变化第drow行

{完成一次外循环col++(drow++)(内循环row会发生ROW_NUMS-1次变化,row每次变化,dcol++)},(所以row变化一次,dcol变化ROW_NUMS-1次)

此时目标矩阵会生成一行  97,6,12

 

 

 

/* 标准文档模板 */

#include "Stdio.h"
#define  ROW_NUMS 3
#define  COL_NUMS 4

#define  DROW_NUMS COL_NUMS
#define  DCOL_NUMS ROW_NUMS

int i,j;
int m,n;
int d[DROW_NUMS][DCOL_NUMS] ={0};
int s[ROW_NUMS][COL_NUMS]={
                                            12,43,54,65,
                                            76,34,25,87,
                                             97,45,33,59  

                                           };
int main(void)
{
    int dcol,drow,col,row;
    print(S);
    print(D);

    drow = 0;
    dcol = 0;
    for(drow=0,col=0;col<COL_NUMS;col++,drow++)
    {
        for(dcol=0,row=ROW_NUMS-1;row>=0;row--,dcol++)
        {
              d[drow][dcol] = s[row][col];
        }
        printf("/n");
    }
    print(S);
    print(D);


 /* 此处添加你自己的代码 */
    getch();
    return 0;
}

 

 

 

2.第二种做法

 

思想和1是一样的,另一种形势而已,就是原矩阵的最后一行是目标矩阵的第一列,

所以原矩阵的外循环用行row,而且初值为ROW_NUMS-1。

内循环用列col,初值为0最大值为COL_NUMS.

 

目标矩阵的外循环是列,放在原矩阵的外循环中.

for( dcol=0,row=ROW_NUMS-1;row>=0;row--,dcol++)

内循环是行,放在原矩阵的内循环中.

for( drow=0,col=0;col<COL_NUMS;col++,drow++)

/* 标准文档模板 */

#include "Stdio.h"
#define  ROW_NUMS 3
#define  COL_NUMS 4

#define  DROW_NUMS COL_NUMS
#define  DCOL_NUMS ROW_NUMS

int i,j;
int m,n;
int d[DROW_NUMS][DCOL_NUMS] ={
                            0};;
int s[ROW_NUMS][COL_NUMS]={
                            12,43,54,65,
                            76,34,25,87,
                            97,45,33,59   };
#define S 0
#define D 1
void print(int type)
{
    if(type == 0)
    {
    printf("-----------s------------/n");
    for(i=0;i<ROW_NUMS;i++)
    {
        for(j=0;j<COL_NUMS;j++)
        {

                printf(" %d ",s[i][j]);
            if(j==COL_NUMS-1)
                printf("/n");
           
        }
    }
    }
    else
    {
    printf("-----------d------------/n");
     for(i=0;i<DROW_NUMS;i++)
    {
        for(j=0;j<DCOL_NUMS;j++)
        {

            printf(" %d ",d[i][j]);
            if(j==DCOL_NUMS-1)
                printf("/n");
           
        }
    }
    }
}
int main(void)
{
    int dcol,drow,col,row;
    print(S);
    print(D);
    for( dcol=0,row=ROW_NUMS-1;row>=0;row--,dcol++)
    {
        for( drow=0,col=0;col<COL_NUMS;col++,drow++)
        {
           printf("[%d %d]%d ",row,col,s[row][col]);
           d[drow][dcol] = s[row][col];
        }
        printf("/n");
    }
    print(S);
    print(D);


 /* 此处添加你自己的代码 */
    getch();
    return 0;
}

 

 

 

3.

原 :    12,43,54,65,
           6,34,25,87,
           97,45,33,59 

 

目标:   97,6,12

           45,34,43

           33,25,54

           59,87,65

 

 

前两种方法没有用矩阵的关系,下面用的是矩阵的关系就是原矩阵 一元素的纵坐标下标 是目标矩阵的元素的横坐标下标,原矩阵元素横坐标是row   目标矩阵的纵坐标是 (ROW_NUMS—row)

 

#include "Stdio.h"
#define  ROW_NUMS 3
#define  COL_NUMS 4

#define  DROW_NUMS COL_NUMS
#define  DCOL_NUMS ROW_NUMS

int i,j;
int m,n;
int d[DROW_NUMS][DCOL_NUMS] ={0};
int s[ROW_NUMS][COL_NUMS]={
                            12,43,54,65,
                            76,34,25,87,
                            97,45,33,59   };
#define S 0
#define D 1
void print(int type)
{
    if(type == 0)
    {
    printf("-----------s------------/n");
    for(i=0;i<ROW_NUMS;i++)
    {
        for(j=0;j<COL_NUMS;j++)
        {

                printf(" %d ",s[i][j]);
            if(j==COL_NUMS-1)
                printf("/n");
           
        }
    }
    }
    else
    {
    printf("-----------d------------/n");
     for(i=0;i<DROW_NUMS;i++)
    {
        for(j=0;j<DCOL_NUMS;j++)
        {

            printf(" %d ",d[i][j]);
            if(j==DCOL_NUMS-1)
                printf("/n");
           
        }
    }
    }
}
int main(void)
{
    int dcol,drow,col,row;
    print(S);
    print(D);

    drow = 0;
    dcol = 0;
    for( row=ROW_NUMS-1;row>=0;row--)
    {
        for( col=0;col<COL_NUMS;col++)
        {
            printf("[%d %d]%d ",row,col,s[row][col]);
            /*printf("{%d %d}%d ",drow,dcol,d[drow][dcol]); */
            d[col][ROW_NUMS-1-row] = s[row][col];
        }
        printf("/n");

    }
    print(S);
    print(D);


 /* 此处添加你自己的代码 */
    getch();
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值