C language: two-dimensional array

The definition of a two-dimensional array is similar to that of a one-dimensional array.

Type name Array name[][]; example: int a[3][3];

Sometimes a two-dimensional array is called a matrix, and the first square brackets are called the rows of the rectangle, and the second square brackets are called the columns of the rectangle.

It seems a bit pale to just talk about the theory, but the main thing is to realize the charm of two-dimensional arrays in doing the questions.

Example 1: Guo Yuan picking apples

topic description

Guo Yuan came to an apple grove one day, and each tree in it had different numbers of apples. Guo Yuan could only take the apples from the same tree. Drop and pick the apples on the tree where he is and take them away (assuming that Guo Yuan will walk through every apple tree), ask Guo Yuan during the whole process of picking apples, what is the difference between the maximum number of apples he carries and the minimum number of apples? How many?

enter

m, n (that is, the number of rows and columns of fruit trees in the apple grove, 0<n, m<=10) m rows and n columns of data (that is, the number of apples on each tree, no more than 100)

output

1 number (the difference between the maximum number of apples and the minimum number of apples that Guo Yuan carried on his body during the whole process of picking apples)

sample input

4 3
2 6 5
1 3 7
5 3 5
1 7 12

sample output

11

AC code:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ULL;
const int MAXN=10000012;
const int N=1e6+7;
const int INF=0x3f3f3f3f;
const int P=131;

//This question is to find the difference between the largest element and the smallest element in the two-dimensional array, and compare the water.
int apple[20][20],maxn,minn,n,m;
int main(){
    maxn=0,minn=999;  //Due to the need to compare later, set the value of maxn to be smaller and the value of minn to be larger
    cin >> n >> m;
    for(int i=0;i<n;i++){   //Two loops are required to enter the array elements
        for(int j=0;j<m;j++){
            cin >> apple[i][j];
            if(maxn<apple[i][j]){  //Compare to find the largest element in the array
                maxn=apple[i][j];
            }
            if(minn>apple[i][j]){  //Compare to find the smallest element in an array
                minn=apple[i][j];
            }
        }
    }
    cout << maxn-minn << "\n";
    return 0;
}
  

Example 2: Solving for the number of mines

topic description

In order to ensure that the important military bases on the border will not be invaded by the enemy, our army planted x landmines on the only way the enemy must pass. It is known that this must pass is in the shape of an n * m square array. In order to let our The friendly army knew where there were landmines, and our army engineers drew a map of the distribution of landmines. In this distribution map, if there is no landmine at a certain point, the sum of each digit of the number marked at this point will be an even number; on the contrary, if there is a mine at this point, the sum of each digit of the number marked at this point will be an odd number .
Please program to calculate how many landmines are buried in this area.
For example: there is a 5 * 6 mine distribution map below, and the area where the mines are buried is marked with a gray background. There are 10 mines in this area.

12

35

90

21

1

9

91

3892

8749

342

3421

89

1881

1111

39

4

1

34

9

93

34

12

45

0

67

4

34

19

235

32

AC code:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ULL;
const int MAXN=10000012;
const int N=1e6+7;
const int INF=0x3f3f3f3f;
const int P=131;

int n,m;
int dl[120][120];
int main(){
    int cnt=0; 
    cin >> n >> m;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin >> dl[i][j];
            int t=0;
            while(dl[i][j]>0){  //Find the sum of the digits of the elements
                t+=dl[i][j]%10;
                dl[i][j]/=10;
            }
            if(t%2==1){ //If it is odd, add one to cnt
                cnt++;
            }
        }
    }
    cout << cnt << "\n";
    return 0;
}
  

Example 3: Number of Bullseyes

topic description

James found out that there is such a type of number in the two-dimensional array. This number is just larger than the numbers in the four directions (up, down, left, and right) (because it needs to be larger than the numbers in the four directions, this number cannot be in the first row. , the last row, the first column, and the last column), James calls them bullseye numbers, please program to find out the bullseye numbers of a two-dimensional array, and output them.

enter

The first line contains two integers n and m (both n and m are integers between 4 and 100), which means that the next two-dimensional array has n rows and m columns.
Next n lines, each line has m integers.

output

Please output the number of bullseyes that meet the conditions in the order of input, one per line.

sample input

4 4
1 2 3 4
5 6 5 8
9 1 11 10
13 4 5 16

sample output

6
11
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ULL;
const int MAXN=10000012;
const int N=1e6+7;
const int INF=0x3f3f3f3f;
const int P=131;

int n,m;
int a[120][120];
int main(){
    cin >> n >> m;
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            cin >> a[i][j];
        }
    }
    for(int i=1;i<n-1;i++){
        for(int j=1;j<m-1;j++){
            if(a[i][j]>a[i-1][j]&&a[i][j]>a[i+1][j]&&a[i][j]>a[i][j-1]&&a[i][j]>a[i][j+1]){ //Compare the surrounding array elements, and output if the conditions are met
                cout << a[i][j] << "\n";
            }
        }
    }
    return 0;
}
  

Example 4: Digital Trends II

topic description

Input an integer N and output the corresponding square matrix.

enter

an integer N. ( 0 < n < 10 )

output

A square matrix with field width 3 for each number.

sample input

5

sample output

 21 22 23 24 25
 16 17 18 19 20
 11 12 13 14 15
  6  7  8  9 10
  1  2  3  4  5
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ULL;
const int MAXN=10000012;
const int N=1e6+7;
const int INF=0x3f3f3f3f;
const int P=131;

int n;
int a[12][12];
int main(){
    cin >> n;
    int t=1;
    for(int i=n-1;i>=0;i--){
        for(int j=0;j<n;j++){
            a[i][j]=t++;
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            printf("%3d",a[i][j]);
        }
        cout << "\n";
    }
    return 0;
}
  

Note: These are relatively simple questions in two-dimensional arrays. The main function is to further understand the application of two-dimensional arrays. If you want to solve more difficult questions, it is recommended to practice on Luogu or other platforms.

Tags: C

Posted by kuni on Tue, 21 Feb 2023 05:28:34 +0530