Matrix
题目描述
一个矩阵An×m,矩阵按行依次为1∼nm。若干种指令,指令集如下: (以3×3的初始矩阵为例,结果矩阵列中为初始矩阵执行这条指令后的矩阵结果)
指令 | 含义 | 指令示例 | 结果矩阵 |
---|---|---|---|
IN n m | 初始化为n×m的矩阵 | IN 3 3 | 1 2 3 4 5 6 7 8 9 |
SR x y | 交换矩阵的x,y行 | SR 1 2 | 4 5 6 1 2 3 7 8 9 |
SC x y | 交换矩阵的x,y列 | SC 1 2 | 2 1 3 5 4 6 8 7 9 |
TR | 矩阵转置 | TR | 1 4 7 2 5 8 3 6 9 |
FR | 上下镜像反转 | FR | 7 8 9 4 5 6 1 2 3 |
FC | 左右镜像反转 | FC | 3 2 1 6 5 4 9 8 7 |
PR | 输出矩阵 | PR | 1 2 3 4 5 6 7 8 9 |
现在给你一个合法的指令序列(条数不超过1000,矩阵行列最大不超过10),请执行对应指令。
输入
每行输入一条指令。
输出
对于每个PR命令,输出矩阵。矩阵元素之间有一个空格,行末无空格,最后输出一个空行。
样例输入
IN 3 3 SR 1 2 PR SC 1 2 TR PR FR FC PR
样例输出
4 5 6 1 2 3 7 8 9 5 2 8 4 1 7 6 3 9 9 3 6 7 1 4 8 2 5
解题思路:
首先对于以上这些矩阵变化指令,我们可以分别定义函数去实现,然后在主函数中对其实现调用,当然,你也可以不采用定义函数的方式,只是个人不太推荐。
注意输出要求:
对于每个PR命令,输出矩阵。矩阵元素之间有一个空格,行末无空格,最后输出一个空行。
最后输出一个空行。这个值得注意,如果你最后pe,那大概就是这里出错。
最后就是实现思路:
#include<stdio.h> int lbl[15][15]; /*函数我是自己随意写的函数名*/ char zbm[5]; /*用于读取输入指令*/ int n,m,t,x,y,temp; /*temp用于保存中间变量*/ void in() { int number=1; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ lbl[i][j]=number; number++; } } } void sr() { for(int i=1;i<=m;i++){ //个人对于矩阵的输入输出都是从1开始,便于理解 t=lbl[x][i]; lbl[x][i]=lbl[y][i]; lbl[y][i]=t; } } void sc() { for(int i=1;i<=n;i++){ t=lbl[i][x]; lbl[i][x]=lbl[i][y]; lbl[i][y]=t; } } void tr() { int a[15][15]; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ a[j][i]=lbl[i][j]; } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ lbl[j][i]=a[j][i]; } } t=m; /*转置之后矩阵的行数和列数交换*/ m=n; n=t; } void fr() { for(int i=1;i<=n/2;i++){ for(int j=1;j<=m;j++){ temp=lbl[i][j]; lbl[i][j]=lbl[n+1-i][j]; lbl[n+1-i][j]=temp; } } } void fc() { for(int i=1;i<=n;i++){ for(int j=1;j<=m/2;j++){ temp=lbl[i][j]; lbl[i][j]=lbl[i][m+1-j]; lbl[i][m+1-j]=temp; } } } void pr() { for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ printf("%d",lbl[i][j]); if(j!=m){ printf(" "); } } printf("\n"); } printf("\n"); } int main() { while(scanf("%s",zbm)!=EOF){ if(zbm[0]=='I'&&zbm[1]=='N'){ scanf("%d %d",&n,&m); in(); } else if(zbm[0]=='S'&&zbm[1]=='R'){ scanf("%d %d",&x,&y); sr(); } else if(zbm[0]=='S'&&zbm[1]=='C'){ scanf("%d %d",&x,&y); sc(); } else if(zbm[0]=='T'&&zbm[1]=='R'){ tr(); } else if(zbm[0]=='F'&&zbm[1]=='R'){ fr(); } else if(zbm[0]=='F'&&zbm[1]=='C'){ fc(); } else if(zbm[0]=='P'&&zbm[1]=='R'){ pr(); } } return 0; }
题目没啥难得,注意细心点,基本本地样例过了全局就能过。
本文含有隐藏内容,请 开通VIP 后查看