第5题:矩阵翻转

来源:互联网 发布:7u分享网络微信打不开 编辑:程序博客网 时间:2024/04/30 07:22
输入第一行包括由空格分开的整数M、N、T(0 < M < 200,0 < N < 200,T=0或1),其中M和N分别表示待处理矩阵的行数与列数,T为0时表示左右翻转,为1时表示上下翻转。
之后的M行,每行包括由空格分隔的N个整数,依次为输入矩阵的每一行的数据。

输出包括M行N列,每个数字之间用一个空格分隔,每一行行末均有一个空格,表示的是按照要求翻转后的矩阵。

样例输入

4 4 11 2 3 45 6 7 89 0 1 23 4 5 6

样例输出

3 4 5 6 9 0 1 2 5 6 7 8 1 2 3 4 
这算是一道比较典型的大化小的问题,要对整个矩阵进行上下左右翻转,并且仅仅是上下翻转一次或左右翻转一次。只要关注每一行或列的翻转,因为操作都是一样的。代码如下:

#include<stdio.h>
int main(void){
int m, n, t;
int i, j, k;
int a[200][200];

scanf("%d%d%d", &m, &n, &t);
if(m < 1 || m > 199 || n < 1 || n > 199)
return 0;
if(t != 0 && t != 1)
return 0;

for(i = 0; i < m; i++)
for(j = 0; j < n; j++)
scanf("%d", &a[i][j]);

if(t == 0){
for(j = 0; j < m; j++){
for(i = 0; i < n/2; i++){
k = a[j][i];
a[j][i] = a[j][n-i-1];
a[j][n-i-1] = k;
}
}
for(i = 0; i < m; i++){
for(j = 0; j < n; j++)
printf("%d ", a[i][j]);
printf("\n");
}
}
else {
for(j = 0; j < n; j++){
for(i = 0; i < m/2; i++){
k = a[i][j];
a[i][j] = a[m-i-1][j];
a[m-i-1][j] = k;
}
}
for(i = 0; i < m; i++){
for(j = 0; j < n; j++)
printf("%d ", a[i][j]);
printf("\n");
}
}

return 0;
}


1 0
原创粉丝点击