题目描述
一个矩阵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
这道题不是很难,分别定义几个函数用来执行各个指令,再分情况调用即可。
strcmp() 用来比较字符串(区分大小写),字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strcmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,若差值不为0 则将差值返回。
所以如果返回值为零,则两个字符串相同。
#include <stdio.h>
#include <string.h>
int num[12][12];
int s[12][12];
int n,m,x,y;
void IN(int n,int m)//n为行,m为列
{
int i,j,a = 1;
for(i= 1;i <= n;i++)
{
for(j = 1;j <= m;j++)
{
num[i][j] = a;
a++;
}
}
}
void SR(int x,int y)
{
int i,temp;
for(i = 1;i <= m;i++)
{
temp = num[x][i];
num[x][i] = num[y][i];
num[y][i] = temp;
}
}
void SC(int x,int y)//An×m
{
int i,temp;
for(i = 1;i <= n;i++)
{
temp = num[i][x];
num[i][x] = num[i][y];
num[i][y] = temp;
}
}
void TR()
{
int i,j,t;
for(i = 1;i <=n;i++)//i为列,j为行
{
for(j = 1;j <= m;j++)
{
s[j][i] = num[i][j];
}
}
t = m;//这里要注意,此后行数与列数也互换了
m = n;
n = t;
for(i = 1;i <=n;i++)//i为列,j为行
{
for(j = 1;j <= m;j++)
{
num[i][j] = s[i][j];
}
}
}
void FR()
{
int i = 1,j = n;
while(j >= i)
{
SR(i,j);
i++,j--;
}
}
void FC()
{
int i = 1,j = m;
while(j >= i)
{
SC(i,j);
i++,j--;
}
}
void PR()
{
int i,j;
for(i = 1;i <= n;i++)
{
for(j = 1;j <= m;j++)
{
if(j == m)
{
printf("%d\n",num[i][j]);
break;
}
printf("%d ",num[i][j]);
}
}
printf("\n");
}
char str[5];
int n1,m1;
int main()
{
while(scanf("%s",str)!=EOF)
{
if(strcmp(str,"IN")==0)//用strcmp函数来判断执行哪个指令
{
scanf("%d%d",&n,&m);
IN(n,m);
}
else if(strcmp(str,"SR")==0)
{
scanf("%d%d",&n1,&m1);
SR(n1,m1);
}
else if(strcmp(str,"SC")==0)
{
scanf("%d%d",&n1,&m1);
SC(n1,m1);
}
else if(strcmp(str,"TR")==0)
TR();
else if(strcmp(str,"FR")==0)
FR();
else if(strcmp(str,"FC")==0)
FC();
else
PR();
}
return 0;
}