Advertisement

全国青少年信息学奥林匹克竞赛(信奥赛)备考每日一题--二维数组

阅读量:

题目:矩阵交换行

描述:给定一个由5行5列构成的矩阵(在数学定义中作为一个r×c大小的矩形阵列),交换第n行与第m行的位置,并输出变换后的矩阵状态。

输入包含六个数据行。其中前五行代表矩阵的各行元素, 各元素之间由一个空格分隔开; 第六行为两个整数 m 和 n, 以空格分隔

输出描述:输出交换之后的矩阵,矩阵的每一行元素占一行,元素之间以一个空格分开。

输入用例:

1 2 2 1 2

5 6 7 8 3

9 3 0 5 3

7 2 1 4 6

3 0 8 2 4

1 5

输出用例:

3 0 8 2 4

5 6 7 8 3

9 3 0 5 3

7 2 1 4 6

1 2 2 1 2

解题思路:

为了表示矩阵而使用一个二维数组,并将每个元素存储于该结构之中。在C/C++语言中索引通常采用零基索引方式(即从零开始)。为了确保数据结构的准确映射关系,“行数与列数”的数量必须与原始矩阵完全一致。“行号”与“列号”的起始位置不同:如果采用一维数组进行存储,则必须保证定义的二维数组大小比原始矩阵的大一倍以适应这种索引方式的变化

互换两行为操作的目的,在此情况下即为将所有对应位置的数值进行调换。此时确定了该操作的具体范围是从第1个元素至最后一个元素。为了实现这一目标,在程序设计中通常会采用循环结构来处理每一对元素。其中循环变量用于标记各列的位置。

具体代码如下:

复制代码
 #include<bits/stdc++.h>

    
 using namespace std;
    
 int main(){
    
     const int N=6;
    
     int a[N][N];
    
     for(int i=1;i<=N-1;i++){
    
     for(int j=1;j<=N-1;j++){
    
         cin>>a[i][j];
    
     }
    
     }
    
     int m,n;
    
     cin>>m>>n;
    
     for(int i=1;i<=N-1;i++){
    
     swap(a[m][i],a[n][i]);
    
     }
    
     for(int i=1;i<=N-1;i++){
    
     for(int j=1;j<=N-1;j++){
    
         cout<<a[i][j]<<" ";
    
     }
    
     cout<<endl;
    
     }
    
     return 0;
    
 }

当题目中的矩阵尺寸不再为固定值5×5时,在其中我们设定矩阵大小为r \times c(其中rc的最大取值均为100)。随后可以通过外部输入确定这两个参数的具体数值。此时我们需要重新定义变量a并补充并更新参数rc的相关设定。具体代码如下

复制代码
 #include<bits/stdc++.h>

    
 using namespace std;
    
 int main(){
    
     const int COL=105;
    
     const int ROW=105;
    
     int a[ROW][COL];
    
     int r,c;
    
     cin>>r>>c;
    
     for(int i=1;i<=r;i++){
    
     for(int j=1;j<=c;j++){
    
         cin>>a[i][j];
    
     }
    
     }
    
     int m,n;
    
     cin>>m>>n;
    
     for(int i=1;i<=c;i++){
    
     swap(a[m][i],a[n][i]);
    
     }
    
     for(int i=1;i<=r;i++){
    
     for(int j=1;j<=c;j++){
    
         cout<<a[i][j]<<" ";
    
     }
    
     cout<<endl;
    
     }
    
     return 0;
    
 }

全部评论 (0)

还没有任何评论哟~