2021-2-6语法基础二二维数组II
作者:互联网
二维数组
定义
int a[3][4]; //定义了一个由3个一维数组组成的,每个一维数组最多存放4个元素
int b[2][3] = {{1, 2, 3}, {4, 5, 6}}; //二维数组的初始化
a[1][2] = 3;
//输入一个二维表格
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 ++)
cout << a[i][j] << " ";
cout << endl;
}
练习
c5020
算法思想
- 从倒数第二行开始,自底向上计算
- 对于每一列来说,
a[i][j] += min(a[i + 1][j], a[i + 1][j + 1]);
- 对于每一列来说,
- 最终结果在第一行第一列
#include <iostream>
using namespace std;
int a[1510][1510];
int main()
{
int n;
cin >> n;
//读入数塔
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= i; j ++)
cin >> a[i][j];
//从倒数第二行开始向上遍历每一行
for(int i = n - 1; i >= 1; i --)
{
//枚举每一列,进行计算
for(int j = 1; j <= i; j ++)
{
a[i][j] += min(a[i + 1][j], a[i + 1][j + 1]);
}
}
//最终结果在第一行第一列
cout << a[1][1] << endl;
return 0;
}
c5019 - 蛇形方阵
- 使用二维数组a[][]来存储蛇形方阵
- 使用变量x保存要填的数x = 0,使用变量r保存走到的行数,c保存走到的列数,r =1, c = n
- 只要x < n * n,重复下面的操作:
- 只要r + 1 <= n、并且a[r + 1][c]==0,填数、向下走
- 只要c - 1 >= 1、并且a[r][c - 1]==0,填数、向左走
- 只要r - 1 >= 1、并且a[r - 1][c]==0,填数、向上走
- 只要c + 1 <= n、并且a[r][c + 1]==0,填数、向右走
#include <iostream>
#include <iomanip>
using namespace std;
int a[25][25];
int main()
{
int n;
cin >> n;
int x = 1, r = 1, c = n;
a[r][c] = x; //将1填入第一行最后一列
while(x < n * n) //数字没有填满
{
//向下走,将x增加1并填入新的格子
while(r + 1 <= n && a[r + 1][c] == 0)
a[++ r][c] = ++ x;
//向左走,将x增加1并填入新的格子
while(c - 1 >= 1 && a[r][c - 1] == 0)
a[r][-- c] = ++ x;
//向上走,将x增加1并填入新的格子
while(r - 1 >= 1 && a[r - 1][c] == 0)
a[-- r][c] = ++ x;
//向右走,将x增加1并填入新的格子
while(c + 1 <= n && a[r][c + 1] == 0)
a[r][++ c] = ++ x;
}
//输出蛇形方阵
for(int i = 1; i <= n; i ++)
{
for(int j = 1; j <= n; j ++)
{
//setw设置域宽为4,不够补空格。
//setiosflags(ios::left)设置向左对齐,在右边补空格
cout << setw(4) << setiosflags(ios::left) << a[i][j];
}
cout << endl;
}
}