输入一个n行m列的黑白图像,将它顺时针旋转90度后输出。如果你没有更好的算法,可参照下图给出的思路完成本题目。
输入格式:
第一行包含两个整数n和m,表示图像包含像素点的行数和列数。1 <= n <= 100,1 <= m <= 100。
接下来n行,每行m个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在0~255之间。
输出格式:
共m行,每行n个整数,为顺时针旋转90度后的图像。相邻两个整数之间用单个空格隔开。
输入样例:
3 3
1 2 3
4 5 6
7 8 9
输出样例:
在这里给出原图像顺时针旋转90度后的结果图像。例如:
7 4 1
8 5 2
9 6 3
自己写的
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void readarray(int (*arr)[100], int M, int N)
{
int i, j, tmp;
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
scanf("%d", &tmp);
arr[i][j] = tmp;
}
}
}
int* turn90Degrees(int (*arr)[100], int M, int N)
{
int i, j;
static int arr0[100][100] = { 0 };
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
arr0[j][M - 1 - i] = arr[i][j];
}
}
return arr0;
}
void printarray(int (*arr)[100], int M, int N)
{
int i, j;
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
}
int main()
{
int M, N;
scanf("%d%d", &M, &N);
int arr[100][100] = { 0 };
readarray(arr, M, N);
int(* arr1)[100][100] = turn90Degrees(arr, M, N);
printarray(arr1, M, N);
return 0;
}
老师写的
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
int n,m ,tmp;
scanf("%d%d", &m,&n);
int a[m][n];
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
scanf("%d", &a[i][j]);
}
}
int b[n][m];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
b[i][j] = a[j][i];
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0,k=m-1; j <=k; j++,k--)
{
int tmp = b[i][j];
b[i][j] = b[i][k];
b[i][k] = tmp;
}
}
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
printf("%d ", b[i][j]);
}
printf("\n");
}
return 0;
}