c#中将一个矩阵二维数组顺时针旋转90度,代码怎么写啊?
#include
#define N 4
int a[N][N]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}};
void prt()
{int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%4d",a[i][j]);
printf("
");
}
}
int main()
{int i,j,k,t;
printf("原来的数组:
");
prt();
for(i=0;i<=N/2;i++)
for(j=i;j<N-i-1;j++)
{
t=a[i][j];
a[i][j]=a[j][N-1-i];
a[j][N-1-i]=a[N-1-i][N-1-j];
a[N-1-i][N-1-j]=a[N-1-j][i];
a[N-1-j][i]=t;
}
printf("
顺时针旋转90度后的数组:
");
prt();
getch();
return 0;
}
顺时针旋转90度不就是矩阵的转置吗?行和列交换就可以了。
#include
#define M 3
void main()
{
int a[M][M],b[M][M];
int i,j;
printf("输入矩阵a:
");
for(i=0;i<M;i++)
for(j=0;j<M;j++)
scanf("%d",&a[i][j]);
printf("转置前的矩阵:
");
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
printf("%d ",a[i][j]);
printf("
");
}
printf("
转置后的矩阵:
");
for(i=0;i<M;i++)
{
for(j=0;j<M;j++)
{
b[i][j]=a[j][i];
printf("%d ",b[i][j]);
}
printf("
");
}
}
运行结果:
输入矩阵a:
1 2 3
4 5 6
7 8 9
转置前的矩阵:
1 2 3
4 5 6
7 8 9
转置后的矩阵:
1 4 7
2 5 8
3 6 9
Press any key to continue
int n=0;
int i=0;
int j=0;
int k=0;
StringBuilder sb = new StringBuilder();
m = 4;
n = 5;
int[,] JZ1 = new int[m, n];
int[,] JZ2 = new int[n, m];
for (i = 0; i < m; i++)//初始化原矩阵
{
for (j = 0; j < n; j++)
{
JZ1[i,j] = ++k;
sb.Append(JZ1[i, j].ToString() + " ");
}
sb.AppendLine(" ");
}
label3.Text = sb.ToString();//显示原矩阵
sb.Remove(0, sb.Length);
for (i = 0; i < m; i++)
{
for (j = 0; j < n; j++)
{
JZ2[j, m - i - 1] = JZ1[i, j];//将原矩阵顺时针转90度
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
sb.Append(JZ2[i, j].ToString() + " ");
}
sb.AppendLine(" ");
}
label4.Text = sb.ToString();//显示结果
纸上画图找规律
行变列,列变行
然后行的顺序反过来
你在纸上画一下示意图就会发现规律
蒋刷血源: int m=0;int n=0;int i=0;int j=0;int k=0; StringBuilder sb = new StringBuilder();m = 4;n = 5;int[,] JZ1 = new int[m, n];int[,] JZ2 = new int[n, m];for (i = 0; i {for (j = 0; j {JZ1[i,j] = ++k;sb.Append(JZ1[i, j].ToString() + " ");}sb.AppendLine(...
京山县18775255613: 编写函数将一个NxN的二维数组的周边元素“顺时针”轮转1位. - ?
蒋刷血源: int i,j; char t; t=a[0][0]; //先提取一个值,后面的就可以直接覆盖; for(i=0;i a[i][0]=a[i+1][0]; for(i=0;i a[N-1][i]=a[N-1][i+1]; for(i=N-1;i>0;i--) a[i][2]=a[i-1][2]; a[0][2]=a[0][1]; a[0][1]=t; 注:本答案是根据 热心网友 的回答修改而成的,你若觉得还行,想谢就谢谢这位热心网友吧
京山县18775255613: C语言二维数组元素怎么“顺时针旋转”,如图 - ?
蒋刷血源: #include "stdio.h" void printmatrixclockwisely(int(*a)[5], int row, int col) { if(a == null|| rowreturn; int i = 0, j = 0, k = 0; for(i = 0; ifor(j = i; jprintf("%d ",a[i][j]); } j--; for(k = i + 1; kprintf("%d ",a[k][j]); k=row - i - 1; j=col - i - 2; for(; j >= i; j--) printf("...
京山县18775255613: 将n行n列的数值方阵沿顺时针旋转90°如何实现? - ?
蒋刷血源: 这是一个最重要的过程z[i,j]:=a[j,n-i+1] 其实只是一个转致矩阵的过程 program shuzu; var a,b,c:array[1..100,1..100] of integer; n,i,j,k,x,y:integer; begin write('n='); readln(n); for i:=1 to n do begin for j:=1 to n do read(a[i,j]); readln; end; for i:=1 to n do for ...
京山县18775255613: c语言编程 将一个随机输入的5*5二维数组旋转后以5行5列输出 旋转方式有4种 分别以列表的对角线旋转 - ?
蒋刷血源: #include<stdio.h> void print(int n[5][5]) { int i, j; for(i = 0; i < 5; i++) { for(j = 0; j < 5; j++) { printf("%d\t",n[i][j]); } printf("\n"); } } void zx1(int n[5][5]) /*以表格的中线旋转 11-15 */ { int i, j; int m; for(i = 0; i < 2; i++) { for(j = 0; j < 5; j++) { m = n[i][j]; n[i][j] = n[...
京山县18775255613: c语言,将二维数组绕一个角旋转90度 不借助第二数组, - ?
蒋刷血源: 可以,如果如不改写数组,你需要提供一个内联函数.如果需要保存转置,你必须使用第二数组.inline int zhuanzhi(int* list,int n ,int newn, int newh){ newn++,newh++;//n表示数组第一维元素个数,newn表示你调用的转置后的数组的横索引.return...
京山县18775255613: C语言中怎样将一个三行四列的二维数组 逆时针旋转90°啊,帮帮忙啊 - ?
蒋刷血源: 下面程序的功能是将一个 3 行 4 列的数组进行逆时针旋转 90 度后输出,要求原始数组的数据随机输入,新数组以 4 行 3 列的方式输出.主要涉及知识点:二维数组的输入及输出、循环嵌套与二维数组的结合、输出的格式控制.代码实现:...
京山县18775255613: C#二维数组转置 - ?
蒋刷血源: 无非是两层for循环罢了,以二维 string 数组为例:public static string[,] Rotate(string[,] array){ int x = array.GetUpperBound(0); // 一维 int y = array.GetUpperBound(1); /...
京山县18775255613: 急!!!!!在线等!C语言 定义一个二维数组来存放一个矩阵,然后将矩阵转置输出 - ?
蒋刷血源: #include"stdio.h" int main() {int i,j,a[3][4];for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);for(j=0;j<4;j++){for(i=0;i<3;i++)printf("%d ",a[i][j]);printf("\n");}return 0; } 你自己再琢磨一下吧..
京山县18775255613: 编一C个程序:将一个任意二维数组转置 - ?
蒋刷血源: 举例如下的矩阵A:1 2 34 5 67 8 9 则经过转置后,即将矩阵的第i行变成了现在的第i列,则原来的矩阵A变为如下矩阵B:1 4 72 5 83 6 9 代码:#include int main() { int n[3][3]={1, 2, 3, 4, 5, 6, 7, 8, 9}; int i, j, temp; printf("原始矩阵:\n"); for(i=0; ...