知识点
- 字符数组存储字符串
- 字符串转换为
int
类型数组str[i]-'0'
- 数组直接定义好大小,否则会出现 bug
int arr[55][55]
而不是 int arr[N][M]
- 定义图像反转方法
- 传入参数
行、列、待转换数组、结果数组
- 形参用引用形式返回
int (&ans)[55][55]
- 图像旋转旋转 90° ,其他可用 90° 转化
后来行号 = 原来列号
后来列号 = 行数 - 1- 原来行号
-
switch
case
语句的使用
代码
/*
设置数组时直接定义比输入规模大的数组不要 int arr[N][M]
*/
#include<iostream>
#include<string.h>
using namespace std;
void convert_0(int N, int M, int arr[55][55], int (&ans)[55][55]){
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
ans[i][j] = arr[i][j];
}
}
}
void convert_90(int N, int M, int arr[55][55], int (&ans)[55][55]){
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
ans[j][N-1-i] = arr[i][j];
}
}
}
void print(int N, int M, int ans[55][55]){
for(int i=0;i<N;i++){
for(int j=0;j<M;j++){
cout<<ans[i][j];
}
cout<<endl;
}
}
int main(){
int T, N, M; //T 组 N 行 M 列
int angle;
char str[55];
int arr[55][55];
int ans[55][55];
cin>>T;
while(T--){
memset(arr, 0, sizeof(arr)); //初始化
memset(ans, 0, sizeof(ans));
memset(str, '0', sizeof(str));
cin>>N>>M;
for(int i=0;i<N;i++){ //字符串转换为 int 数组
cin>>str;
for(int j=0;j<strlen(str);j++){
arr[i][j] = str[j] - '0';
}
}
cin>>angle;
switch(angle){
case 0:
convert_0(N, M, arr, ans);
print(N, M, ans);
break;
case 90:
convert_90(N, M, arr, ans);
print(M, N, ans);
break;
case 180:
convert_90(N, M, arr, ans);
convert_90(M, N, ans, arr);
print(N, M, arr);
break;
case 270:
convert_90(N, M, arr, ans);
convert_90(M, N, ans, arr);
convert_90(N, M, arr, ans);
print(M, N, ans);
break;
default:
break;
}
}
}