一、二维数组的定义
假如我们要保存100个整数,我们可以使用一维数组,定义数组int a[100],然后就可以把这100个整数保存在数组的a[0],a[1],......a[99]。
假如我们有3行,每行有4个整数,应该如何保存呢?
每行使用一个一维数组是可以的,例如:第一行使用数组int a[4],第二行使用数组int b[4],第三行使用数组int c[4]。但是这样3个数组的名称不一样,有时候使用起来比较麻烦,有没有更好的方法呢?下面介绍二维数组的定义:
类型标识符 数组名[常量表达式1][常量表达式2]
例如: int d[3][4]; 表示d数组是整型的二维数组,有3行,每行可以保存4个整数。行的编号是从0至2,列的编号是从0至3。
第i行第j列的元素就是d[i][j],d[i][j]相当于一个普通的整型变量,它的用法相当于一个普通的整型变量的用法。
二、二维数组的读入
定义二维数组 int d[3][4];
1、读入其中一个元素
例如:cin>>d[0][1],输入10,那么会变成这样:
假如再读入cin>>d[1][3],并输入30,那么会变成这样:
2、读入一行数据。
可以用for循环读入一行数据,例如下面是用循环读入4个整数保存到d数组的第2行。
for(int j=0; j<4; j++) cin>>d[2][j]; 并依次输入40 50 60 70,那么会变成:
3、读入多行数据
假如要把3行4列的整数全部读入,可以用两重循环:
for(int i=0; i<3; i++) //共3行
for(int j=0; j<4; j++) //每行读入4个整数
cin>>d[i][j]; //每次读入一个整数,存放到d数组的第i行第j列。
三、二维数组的输出
假如有n行m列的数据保存在二维数组d[0...n-1][0...m-1]。
1、输出其中一个元素
例如cout<<d[0][2]; 表示输出第0行第2列的数据。
2、输出一行数据
假如要输出第i行的m个整数,可以用下面的循环实现:
for(int j=0; j<m; j++) cout<<d[i][j]<<””; //输出第i行第j个数
3、输出整个二维数组
可以用二重循环输出整个二维数组。
for(int i=0; i<n; i++) //共n行
{
for(int j=0; j<m; j++) //每行有m列
cout<<d[i][j]<<” ”; //输出第i行第j列的数
cout<<endl; //每输出完一行,就输出一个换行符
}
例题:
密切相关 查看测评数据信息
有n*m个学生,排成n行m列,行编号从1至n,列编号从1至m。每个学生的身高都是读入的。如果一个学生比他“密切相关”的学生都高,那么该学生就是“高人”,问总共有多少个学生是“高人”。下面以小明同学为例,通过图来说明与小明“密切相关”的同学。
以上A,B,C,D,E,F,G,H共8个位置的学生就是与小明同学“密切相关”的人。注意,上图提及的8个位置当中,如果有哪些位置是超出队伍范围的,那么超出范围的那些位置可以不考虑。
输入格式
第一行,两个整数n和m。1<=n,m<=100。
接下来是n行,每行有m个整数,每个整数范围[140,200]。
输出格式
一个整数
输入/输出例子1
输入:
3 4
150 190 170 180
145 150 165 175
140 178 149 190
输出:文章来源:https://www.toymoban.com/news/detail-739296.html
4
样例解释
“高人”用蓝色标识
150 190 170 180
145 150 165 175
140 178 149 190
#include<bits/stdc++.h>
using namespace std;
int a[100+2][100+2];
int main(){
int row,col,sum=0,flag=0;
int brow[]={-1,-1,-1,0,0,1,1,1};
int bcol[]={-1,0,1,-1,1,-1,0,1};
cin>>row>>col;
for(int i=1;i<=row;i++)
{
for(int j=1;j<=col;j++)
{
cin>>a[i][j];
}
}
for(int i=1;i<=row;i++)
{
for(int j=1;j<=col;j++)
{
flag=0;
for(int k=0;k<8;k++)
{
int newrow=brow[k]+i;
int newcol=bcol[k]+j;
if(a[i][j]<=a[newrow][newcol])
{
flag=1;
break;
}
}
if(flag==0)
{
sum++;
}
}
}
cout<<sum;
return 0;
}
对角线对称 查看测评数据信息
给出n行n列的二维表格,每个格子都有一个整数,问二维表格是否关于主对角线对称?如果是则输出“YES”,否则输出“NO”。主对角线是指从左上角格子到右下角格子的那条线。
下图是4行4列的主对角线:
输入格式
第一行,一个整数n。1<=n<=100。
接下来是n行,每行有n个正整数,范围是[1,1000]。
输出格式
“YES”或“NO”。
输入/输出例子1
输入:
4
1 3 2 4
3 5 7 9
2 7 6 8
4 9 8 3
输出:
YES
输入/输出例子2
输入:
3
12 31 20
31 52 7
20 7 6
输出:
YES
输入/输出例子3
输入:
3
1 3 3
3 5 7
2 7 6
输出:
NO
#include<bits/stdc++.h>
using namespace std;
int a[100+1][100+1];
int main(){
int n,sum=0;
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a[i][j];
}
}
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
if(a[i][j]!=a[j][i])
{
cout<<"NO";
return 0;
}
}
}
cout<<"YES";
return 0;
}
对称数组 查看测评数据信息
给出n行m列的二维数组,现在考虑二维数组是否左右对称、上下对称。如果二维数组既不是左右对称也不是上下对称,那么输出“NONE”。如果二维数组既是左右对称又是上下对称,那么输出“BOTH”。如果二维数组是左右对称但不是上下对称,那么输出“H”。如果二维数组不是左右对称而是上下对称,那么输出“V”。
输入格式
第一行,两个整数,n和m。1<=n,m<=100。
接下来是n行,每行有m个正整数,范围是[1,1000]。
输出格式
一个字符串。“NONE”或“BOTH”或“H”或“V”。双引号不用输出。
输入/输出例子1
输入:
3 4
1 2 3 4
9 8 7 3
1 2 3 4
输出:
V
输入/输出例子2
输入:
3 4
4 2 2 4
3 7 7 3
3 2 2 3
输出:
H
输入/输出例子3
输入:
3 4
4 2 2 4
3 7 7 3
4 2 2 4
输出:
BOTH
输入/输出例子4
输入:
3 4
3 2 2 4
3 7 7 3
4 2 2 4
输出:
NONE文章来源地址https://www.toymoban.com/news/detail-739296.html
#include<bits/stdc++.h>
using namespace std;
int a[100+1][100+1];
int main(){
int flag1=0,flag2=0,col,row;
cin>>row>>col;
for(int i=1;i<=row;i++)
{
for(int j=1;j<=col;j++)
{
cin>>a[i][j];
}
}
for(int i=1;i<=row;i++)
{
for(int j=1;j<=col;j++)
{
if(a[i][j]!=a[i][col-j+1])
flag1=1;
}
}
for(int i=1;i<=col;i++)
{
for(int j=1;j<=row;j++)
{
if(a[i][j]!=a[row-i+1][j])
flag2=1;
}
}
if(flag1==1&&flag2==1)
{
cout<<"NONE";
}
else if(flag1==0&&flag2==0)
{
cout<<"BOTH";
}
else if(flag1==1&&flag2==0)
{
cout<<"V";
}
else
{
cout<<"H";
}
return 0;
}
到了这里,关于c++二维数组详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!