上海找工作网站,网络推广网络营销软件,做彩票网站能挣到钱吗,drupal网站开发题目描述
给定m行n列的图像各像素点灰度值#xff0c;对其依次进行一系列操作后#xff0c;求最终图像。
其中#xff0c;可能的操作及对应字符有如下四种#xff1a;
A#xff1a;顺时针旋转90度#xff1b;
B#xff1a;逆时针旋转90度#xff1b;
C#xff1a…题目描述
给定m行n列的图像各像素点灰度值对其依次进行一系列操作后求最终图像。
其中可能的操作及对应字符有如下四种
A顺时针旋转90度
B逆时针旋转90度
C左右翻转
D上下翻转。
输入描述
第一行包含两个正整数m和n表示图像的行数和列数中间用单个空格隔开。1 m 100, 1 n 100。 接下来m行每行n个整数表示图像中每个像素点的灰度值相邻两个数之间用单个空格隔开。灰度值范围在0到255之间。 接下来一行包含由A、B、C、D组成的字符串s表示需要按顺序执行的操作序列。s的长度在1到100之间。
输出描述
m行每行包含n个整数为最终图像各像素点的灰度值。其中m为最终图像的行数n为最终图像的列数。相邻两个整数之间用单个空格隔开
样例1
输入
2 3 10 0 10 100 100 10 AC
输出
10 100 0 100 10 10
代码
左右镜像 void zuoyou(){for (int i 1; i n; i){for (int j 1; j m/2; j){swap(a[i][j],a[i][m-j1]);}}
}
上下镜像
void shangxia(){for (int i 1; i n/2; i){for (int j 1; j m; j){swap(a[i][j],a[n-i1][j]);}}
}
顺时针转一圈
1 2 3 4 5 6 7 8 9
变成 1 4 7 2 5 8 3 6 9
void zhuanzi(){for (int i1; i max(n,m); i){for (int j 1; j i; j){swap(a[i][j],a[j][i]);}}swap(n,m);
}
为什么J要小于I,因为是为了让对角线不换 .
其他的就对应自己的另一边.转换.
结合一下就是…… #include bits/stdc.h
using namespace std;
int n,m,a[100][100] {0};
void shangxia(){for (int i 1; i n/2; i){for (int j 1; j m; j){swap(a[i][j],a[n-i1][j]);}}
}
void zuoyou(){for (int i 1; i n; i){for (int j 1; j m/2; j){swap(a[i][j],a[i][m-j1]);}}
}
void zhuanzi(){for (int i1; i max(n,m); i){for (int j 1; j i; j){swap(a[i][j],a[j][i]);}}swap(n,m);
}
void shun(){zhuanzi();zuoyou();
}
void ni(){zhuanzi();shangxia();
}
//这是函数部分。
主函数就比较简单套用一下
int main(){cin n m;for (int i 1; i n; i ){for (int j 1; j m; j ){cin a[i][j];}}string s;cin s;for (char opt : s){if (opt A){shun();}else if (opt B){ni();}else if (opt C){zuoyou();}else{shangxia();}}for (int i 1; i n; i ){for (int j 1; j m; j ){cout a[i][j] ;}puts();}return 0;
}