
c++将矩阵顺时针旋转90度
53911147523568122914360123633875768168581351513610#include<iostream>#include<cstdio>#...
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的,谢谢 展开
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的,谢谢 展开
2个回答
展开全部
你到底要逆时针还是顺时针
顺时针的,转置一下,水平翻转一下就好了
逆时针的,转置一下,垂直翻转一下就好了
#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[i][j];
a[i][j] = a[i][N-1-j];
a[i][N-1-j] = 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[i][j];
a[i][j] = a[i][N-1-j];
a[i][N-1-j] = 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;
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主你好!
这个是矩阵转置问题,根据转置的定义如下:
矩阵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;
希望我的回答对你有帮助!望采纳!
这个是矩阵转置问题,根据转置的定义如下:
矩阵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;
希望我的回答对你有帮助!望采纳!
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询