矩阵顺时针转置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;
}