5
39 11 14 75 23
56 81 22 91 43
60 12 36 33 87
57 68 16 85 8
13 51 51 36 10
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
int N,num[6][6];
int main(){
freopen("matrix.in","r",stdin);
freopen("matrix.out","w",stdout);
cin>>N;
for(int i=0;i<N;i++)for(int j=0;j<N;j++)cin>>num[i][j];
for(int i=0;i<N;i++){
for(int j=0;j<(N-1);j++)cout<<num[i][j]<<" ";
cout<<num[i][N-1]<<endl;
}
fclose(stdin);fclose(stdout);
return 0;
}
求大神帮我把这代码改成把上面那逆时针转90的,谢谢
c++将矩阵顺时针旋转90度
答案:3 悬赏:30
解决时间 2021-02-18 04:42
- 提问者网友:萌萌小主
- 2021-02-17 14:42
最佳答案
- 二级知识专家网友:不服输的倔强
- 2021-02-17 15:19
你到底要逆时针还是顺时针
顺时针的,转置一下,水平翻转一下就好了
逆时针的,转置一下,垂直翻转一下就好了
#include <stdio.h>
#include <stdlib.h>
#define N 4
void show(int a[N][N]) {
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%3d", a[i][j]);
}
printf("\n");
}
printf("--\n");
}
int main()
{
int a[N][N];
int i, j, t = 1;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
a[i][j] = t++;
}
}
show(a);
for (i = 0; i < N; i++) {
for (j = 0; j < i; j++) {
t = a[i][j];
a[i][j] = a[j][i];
a[j][i] = t;
}
}
show(a);
for (i = 0; i < N; i++) {
for (j = 0; j < N/2; j++) {
t = a[j][i];
a[j][i] = a[N-1-j][i];
a[N-1-j][i] = t;
}
}
show(a);
return 0;
}
顺时针的,转置一下,水平翻转一下就好了
逆时针的,转置一下,垂直翻转一下就好了
#include <stdio.h>
#include <stdlib.h>
#define N 4
void show(int a[N][N]) {
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%3d", a[i][j]);
}
printf("\n");
}
printf("--\n");
}
int main()
{
int a[N][N];
int i, j, t = 1;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
a[i][j] = t++;
}
}
show(a);
for (i = 0; i < N; i++) {
for (j = 0; j < i; j++) {
t = a[i][j];
a[i][j] = a[j][i];
a[j][i] = t;
}
}
show(a);
for (i = 0; i < N; i++) {
for (j = 0; j < N/2; j++) {
t = a[j][i];
a[j][i] = a[N-1-j][i];
a[N-1-j][i] = t;
}
}
show(a);
return 0;
}
全部回答
- 1楼网友:傲娇菇凉
- 2021-02-17 16:41
楼主你好!
这个是矩阵转置问题,根据转置的定义如下:
矩阵A的转置为这样一个n×m阶矩阵B,满足B=a(j,i),即 b (i,j)=a (j,i)(B的第i行第j列元素是A的第j行第i列元素)
所以根据定义更改部分如下:(将原来的i改为j,原来的j改为i,num[i][N-1]改为num[N-1][j]即可,具体参照如下代码)
for(int i=0;i<N;i++){
for(int j=0;j<(N-1);j++)cout<<num[i][j]<<" ";
cout<<num[i][N-1]<<endl;
}
上面的这段改为下面的这段就可以了!
for(int j=0;j<N;j++){
for(int i=0;i<(N-1);i++)cout<<num[i][j]<<" ";
cout<<num[N-1][j]<<endl;
希望我的回答对你有帮助!望采纳!
- 2楼网友:不服输就别哭
- 2021-02-17 16:33
c语言实现如下:
#include
void main()
{
int i,j,n,m;
int a[100][100];
scanf("%d%d",&n,&m);
for(i=0;i=0;j--)
printf("%d\t",a[j][i]);
printf("\n");
}
printf("逆时针90度后:\n");
for(i=m-1;i>=0;i--)
{
for(j=0;j=0;i--)
{
for(j=m-1;j>=0;j--)
printf("%d\t",a[i][j]);
printf("\n");
}
}样例输入:
4 5
45 7 64 84 65
15 5 35 97 46
4165 967 46 48 46
123 4 56 8 54
顺时针90度后:
123 4165 15 45
4 967 5 7
56 46 35 64
8 48 97 84
54 46 46 65
逆时针90度后:
65 46 46 54
84 97 48 8
64 35 46 56
7 5 967 4
45 15 4165 123
旋转180度后:
54 8 56 4 123
46 48 46 967 4165
46 97 35 5 15
65 84 64 7 45
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯