java定义一个3行3列的二维数组 输入9个数 再把二维数组输出_等级考试专题六:二维数组(1)...

一、二维数组的定义

  当一维数组元素的类型也是一维数组时,便构成了“数组的数组”,即二维数组。二维数组定义的一般格式:

  数据类型  数组名[常量表达式1] [常量表达式2] ;

  例如:int a[4][10];

a数组实质上是一个有4行、10列的表格,表格中可储存40个元素。第1行第1列对应a数组的a[0][0],第n行第m列对应数组元素a[n-1][m-1]。

  说明:当定义的数组下标有多个时,我们称为多维数组,下标的个数并不局限在一个或二个,可以任意多个,如定义一个三维数组a和四维数组b:

         inta[100][3][5];

         intb[100][100][3][5];

         多维的数组引用赋值等操作与二维数组类似。

二、二维数组元素的引用

  二维数组的数组元素引用与一维数组元素引用类似,区别在于二维数组元素的引用必须给出两个下标。

  引用的格式为:

       <数组名>[下标1][下标2]

  说明:显然,每个下标表达式取值不应超出下标所指定的范围,否则会导致致命的越界错误。

  例如,设有定义:int a[3][5];

  则表示a是二维数组(相当于一个3*5的表格),共有3*5=15个元素,它们是:

a[0][0] a[0][1] a[0][2] a[0][3] a[0][4]

a[1][0] a[1][1] a[1][2] a[1][3] a[1][4]

a[2][0] a[2][1] a[2][2] a[2][3] a[2][4]

  因此可以看成一个矩阵(表格),a[2][3]即表示第3行第4列的元素。

三、二维数组的初始化

  二维数组的初始化和一维数组类似。可以将每一行分开来写在各自的括号里,也可以把所有数据写在一个括号里。

  例如:

      int direct[4][2] = {{1,0},{0,1},{-1,0},{0,-1}}

      int direct[4][2] = {1,0,0,1,-1,0,0,-1}               //尽量不要用

四、二维数组的应用实例

题目描述

在参加“采花生”这个项目比赛时,考官会出示一块n行、m列的花生田,一共种了 n*m株花生苗。每株花生植株下都结了一定数量的花生果,选手一开始站在第1行,第1列的位置,要求用最短的时间找到结花生果最多的一株花生植株(数据保 证花生果最多的植株只有一株),然后按先向南(下)走,再向东(右)的路线顺序去采摘它的花生果,沿路经过的其他花生植株下面的花生果也要一并摘下来,但 不允许采摘没有路过的花生植株,否则依犯规出局处理。问这个选手一共可以采摘多少粒花生果?
如一块n=5,m=6的花生田
   第1列 第2列 第3列 第4列 第5列 第6列
第1行  5   7   4   5   1   13
第2行  9   6   3   2   8   7
第3行  10  14   0   1   9   4
第4行  4   6   9  18  25   0
第5行  3   1   2   9   0   2
可以发现结花生果最多的那株花生植株在(4,5),则选手采摘的顺序应为(1,1)-(2,1)-(3,1)-(4,1)-(4,2)-(4,3)-(4,4)-(4,5),得一共采的花生果粒数为5+9+10+4+6+9+18+25=86。

e14390a68f6befc7ef96f7b1b5ce144a.png

输入要求

第1行:两个整数n m( 1 < n,m <= 100 ),表示花生田一共有n行m列。
第2..n+1行:每行m个空格隔开的整数,第i + 1行的第j个整数Pij(0 <= Pij <= 700)表示花生田里植株(i, j)下花生的数目,0表示该植株下没有花生。

输出要求

一行,一个整数,表示选手一共摘到的花生果数目。

输入样例

5    6
5  7  4  5  1 13
9  6  3  2  8  7
10 14  0  1  9  4
4  6  9 18 25 0
3  1  2  9  0  2

输出样例

86

参考程序

#include 
using namespace std;
int main()
{
int n,m,x,y,sum=0,maxx=INT_MIN;
cin>>n>>m;
int a[101][101];
for(int i=1;i<=n;i++)//先找出花生最多的位置
{for(int j=1;j<=m;j++)
{cin>>a[i][j];
{
if(a[i][j]>maxx)
{
maxx=a[i][j];
x=i;
y=j;
}
}
}
}
for(int i=1;i<=x;i++)//先向南(下)摘
{if(a[i][1]<maxx)sum+=a[i][1];else
{cout<<sum+maxx;return 0;
}
}for(int i=2;i<=y;i++)//再向东(右)摘
{if(a[x][i]<maxx)sum+=a[x][i];else
{cout<<sum+maxx;return 0;
}
}return 0;
}

b73e5df1b52ed38ce246c345be86945d.png

程序运行结果

等级考试专题五:CSP-J 2020复赛第二题题解(桶排序的应用)

等级考试专题四:CSP-J 2020第一题题解(进制转换的应用)

等级考试2级(C/C++)专题三:一维数组应用实例

中国电子学会青少年软件编程等级考试2级(C/C++)专题二:一维数组

中国电子学会青少年软件编程等级考试2级(C/C++)专题一:数制和进制转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值