【原创】矩阵交换行
- 描述
-
-
给定一个5*5的矩阵(数学上,一个r×c的矩阵是一个由r行c列元素排列成的矩形阵列),将第n行和第m行交换,输出交换后的结果。
-
- 输入
- 输入共6行,前5行为矩阵的每一行元素,元素与元素之间以一个空格分开。
第6行包含两个整数m、n,以一个空格分开。(1 <= m,n <= 5) - 输出
- 输出交换之后的矩阵,矩阵的每一行元素占一行,元素之间以一个空格分开。
- 样例输入
- 样例输出
- 来源
题目分析:
我们知道这题要用二维数组来写
但是对行的交换,我们可以用一种特殊的方法。
标准库里,有一个函数叫做memcpy,作用是进行数组的拷贝。
memcpy(int *dest, int *src, int size)
作用是把src数组开始size个元素拷贝到dest数组中
因为是数组,传递函数参数时需要用指针传递。
但是一定有人会问
“但是我们使用的是二维数组,无法把行单独取出来进行参数传递来拷贝”
那你就错了
二维数组长这样
(图画的不是很好,见谅)

实际上,这个多维数组可以看成是“数组的数组”,也就是由4个一维数组构成的数组。
所以,如果我们定义了一个数组a[5][5]
其中,这个数组有五个一维数组组成,分别是a[0],a[1],a[2],a[3],a[4]。
每一个数组都可以拿出来当作一维数组进行使用。
所以,回到题目,我们进行行的交换,实际上只需要将一维数组进行交换即可。
最核心的部分如下:(注意数组的下标和行列差1,所以需要将x,y减去1)
- cin>>x>>y;
- --x;--y;
- int temp[100];
- memcpy(temp,a[x],100);
- memcpy(a[x],a[y],100);
- memcpy(a[y],temp,100);
剩余部分的代码应该很简单,在此就不挂出来了,就是数组的读入和输出而已。
完。
赞 (0)