题目描述
输入一个 行 列的黑白图像,将它顺时针旋转 9090 度后输出。
题目链接:B2107 图像旋转 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
输入格式
第一行包含两个整数 和 ,表示图像包含像素点的行数和列数。1≤ ≤100,1≤ ≤100。
接下来 行,每行 个整数,表示图像的每个像素点灰度。相邻两个整数之间用单个空格隔开,每个元素均在 0∼2550∼255 之间。
输出格式
行,每行 个整数,为顺时针旋转 9090 度后的图像。相邻两个整数之间用单个空格隔开。
解题思路
根据题目意思,把矩阵顺时针旋转,相当于把原先矩阵第一列变成第一行,第二列变成第二行,依次类推,因此我们可以从下往上先输出第一列,再输出第二列,...
解题代码
C代码
#include<stdio.h>
int main(){
int n,m;
scanf("%d %d",&n,&m);
int a[n][m];
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++){
scanf("%d",&a[i][j]);
}
}
for(int j = 0; j < m; j++){
for(int i = n-1; i >= 0; i--){
printf("%d ",a[i][j]);
if(i == 0)
printf("\n");
}
}
return 0;
}
C++代码
#include<iostream>
using namespace std;
const int N = 110; //最大长度
int n,m;
int a[N][N];
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++) cin>>a[i][j];
//反转输出
for(int i=0;i<m;i++){
for(int j=n-1;j>=0;j--) cout<<a[j][i]<<' ';
cout<<endl;
}
return 0;
}
Java代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int N = 100;
//输入数据
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int[][] arr = new int[N][N];
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
arr[i][j] = scanner.nextInt();
}
}
//定义结果数组
//arr中的第一行变成了result中的最后一列,第二行变成了倒数第二列
int[][] result = new int[N][N];
int k = n;
for (int i = 0; i < n; i++){
k--;//每进行一行,该行数放到结果数组的列数减一
int l = 0;
for (int j = 0; j < m; j++){
result[l][k] = arr[i][j];//放到l行k列中
l++;
}
}
//打印
for (int i = 0; i < m; i++){
for (int j = 0; j < n; j++){
System.out.print(result[i][j] + " ");
}
System.out.println();
}
}
}