8.9暑假集训 二维数组(预习必看)(新手必看)

8.9暑假集训 二维数组(预习必看)(新手必看)

一、二维数组的定义

在 C++中,二维数组是由多个一维数组组成的数组。它可以被看作是一个矩阵,具有行和列的结构。

int array[2][3];  // 定义一个 2 行 3 列的整型二维数组

如下图:

二维数组的大小在定义时就需要确定,并且不能在后续进行更改。

二、二维数组的初始化

  1. 逐个元素初始化

这种方式可以清晰地为每一个元素指定具体的值。

int array[3][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };
  1. 部分初始化

如果只对部分元素进行初始化,未初始化的元素会被默认初始化为 0 (对于整型和浮点型)、false (对于布尔型)或者空指针(对于指针类型)等。

int array[3][4] = { {1, 2}, {5, 6, 7}, {9} };  // 未初始化的元素会被初始化为 0
  1. 省略行维度初始化

行维度可以省略,但列维度不能省略。编译器会根据初始化的值自动推断出行的数量。

int array[][4] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} };

三、访问二维数组元素

通过行索引和列索引来访问二维数组中的元素。索引从 0 开始。

int value = array[1][2];  // 访问第 2 行第 3 列的元素

// 例如,如果要修改某个元素的值
array[0][0] = 100;

四、二维数组的遍历

通常使用嵌套的 for 循环来遍历二维数组的每一个元素。

for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++) {
        cout << array[i][j] << " ";
    }
    cout << endl;
}

还可以使用其他的遍历方式,比如使用指针(超纲了):

int (*ptr)[4] = array;
for (int i = 0; i < 3; i++) {
    for (int j = 0; j < 4; j++) {
        cout << *(*(ptr + i) + j) << " ";
    }
    cout << endl;
}

五、二维数组作为函数参数

  1. 直接传递数组
void Print_Er_Wei_Array(int array[][4], int rows) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < 4; j++) {
            cout << array[i][j] << " ";
        }
        cout << endl;
    }
}

*注意:在这种方式中,第二维的大小必须明确指定。

  1. 传递指针(超纲)
void Print_Er_Wei_Array(int (*array)[4], int rows) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < 4; j++) {
            cout << (*(array + i))[j] << " ";
        }
        cout << endl;
    }
}

*注意:这种方式在本质上与直接传递数组是相同的。

六、二维数组的用处

一、表示矩阵

  1. 数学计算
    • 用于线性代数中的矩阵运算,如矩阵乘法、加法等。
    • 例如,图像处理中的变换矩阵。
  2. 游戏开发
    • 表示游戏地图,其中每个元素可以表示地图中的一个位置的属性,如是否可通行、地形类型等。
    • 存储角色的位置和状态信息。

二、表格数据

  1. 电子表格
    • 类似 Excel 中的表格,可以存储数字、文本等各种类型的数据。
    • 方便进行数据的统计和分析。
  2. 数据库中的数据
    • 在简单的程序中模拟数据库表,每行和每列代表不同的字段和记录。

三、图像表示

  1. 像素数据
    • 可以用来存储图像的像素信息,其中每行代表图像的一行像素,每列代表每个像素的颜色分量(如 RGB )。

四、棋盘游戏

  1. 棋盘状态
    • 如国际象棋、围棋等棋盘类游戏,二维数组的每个元素可以表示棋盘上相应位置的棋子状态。

五、文本处理

  1. 字符矩阵
    • 处理多行多列的文本,例如排版格式的控制。

六、科学计算

  1. 物理模型
    • 模拟物理场,如温度场、电场等在二维空间中的分布。

(有问题的话请大佬告知我)

(内心:我想要勋章(っ °Д °;)っ) (第三天)

© 2024 本内容版权归梅耀元所有,未经授权请勿转载。

8 个赞

楼主讲的那么清晰 那就做一道题吧

3. 蹦蹦炸弹

题目ID:6284必做题100分

最新提交:

Accepted

100 分

历史最高:

Accepted

100 分

时间限制: 1000ms

空间限制: 524288kB

题目描述

鱼大大在某个世界旅行的时候,遇到了一位黄发白衣的女孩子和一位红衣红帽的小女孩在玩游戏。鱼大大边很好奇地凑了上去。
游戏规则是白衣女孩定下的:她将一片空地划分成nn行mm列的格子,每个格子里都有积分球。这时需要红衣女孩将一个特制的“蹦蹦炸弹”丢出,此炸弹会在落点处向四面八方分裂成8个小炸弹,并将周围一圈的积分球全部炸开却不会炸开正中间落点的积分球。炸开即可获得球内积分,积分越高,奖励越好。
由于红衣女孩年纪稍小,加法都还算不利索,犹豫了半天不知道该把“蹦蹦炸弹”丢在哪里。鱼大大便自告奋勇帮她把每个落点能获得的分数都计算出来,方便红衣女孩决定。

输入格式

第一行两个整数n,mn,m;分别表示格子矩阵的行和列
接下来nn行,每行mm个数字aijaij​,表示矩阵每个格子中积分球的分数

输出格式

共nn行,每行mm个数字,分别表示每个落点能获得的分数

样例

Input 1

5 5 6 8 9 8 7 9 9 6 6 5 7 9 7 6 7 5 7 7 8 7 8 7 9 6 8

Output 1

26 39 37 33 19 39 61 62 55 34 39 57 58 53 32 38 59 59 57 35 19 36 35 39 21

数据范围

1<=n,m<=1001<=n,m<=100
思路? 我也不知道
很简单的算法,直接写
\color{yellow}CE代码

#include<bits/stdc++.h>
using namespace std;
int a[105][105];
int n , m;
int main()
{
	cin >> n >> m;
	for(int i = 1;i <= n; i++)
		{
		for(int j = 1;j <= m; j++)
			{
				cin >> a[i][j];
			}
		}
	for(int i = 1; i <= n; i++)
	{
		for(int j = 1;j <= m; j++)
		{
			ans[i][j] +=a[i-1][j-1];
			ans[i][j] +=a[i-1][j];
			ans[i][j] +=a[i-1][j+1];
			ans[i][j] +=a[i][j-1];
			ans[i][j] +=a[i][j+1];
			ans[i][j] +=a[i+1][j-1];
			ans[i][j] +=a[i+1][j];
			ans[i][j] +=a[i+1][j+1];
		}
	}
	for(int i = 1;i <= n; i++)
	{
		for(int j = 1;j <= m; j++)
			{
				cout << ans[i][j] << " ";
			}
	}
}

\color{yellow}给我个解决方案

3 个赞

欧克,课间再给你

2 个赞

你不是给了代码吗

1 个赞

?我这是语法进阶的代码,又不是你们课程的

。。。

咋打彩色字体

\color{green}LaTeX你们新手等到学个1年再说吧

1 个赞

。。。。。。

我一开始也不知道,1年后老师教我的

教我撒

我教你,私信

2 个赞

$\color{颜色}文字$

2 个赞

@梅耀元

1 个赞

\color{颜色}文字

\color{green}我会了,谢谢大家

1 个赞

哎~对了,就是有些符号比如%打不出来

\%
$\%$

1 个赞

\sum_{x}^{y}
$\sum_{x}^{y}$

1 个赞