C++数组进阶——二维数组的应用及行列互换存储思路,擂台法求最大值

原创 2012年03月30日 15:58:45

      二维数组的定义和引用

一、相关定义

1、  具有两个下标的数组称为二维数组。

2、  一般形式:

类型标识符 数组名[常量表达式][常量表达式]

  例如:float a[3][4], b[5][6];

3、  二维数组的排列顺序:按行存放,即在内存中先顺序存放第一行的元素,再存放第二行的元素。【多维数组元素在内存中的排列顺序:第一维的下标变化最慢,最右边的下标变化最快】

4、  二维数组的引用

数组名[下标][下标]

数组元素是左值,可以出现在表达式中,也可以被赋值。

 注意:在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内。

定义一个三行四列的整型二维数组:int a[3][4];

严格区别在定义数组时用的a[3][4]和引用元素时的a[3][4]的区别:前者a[3][4]用来定义数组的维数和各维的大小,后者a[3][4]中的34是下标值,a[3][4]代表了某个元素。

二、二维数组的初始化

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

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

对不分元素赋初值:int a [3][4]={{1},{5},{9 }};

其他元素自动默认为0.

二维数组中第一维的长度可以不指定,但第二维的长度不能省

 

三、二维数组程序实例:行列互换

将二维数组行列和元素互换,存到另一个二维数组中:

实现如下:


/*

 * example.cpp

 *

 *  Created on: 2012-3-30

 *      Author: yangbo_hbzjk

 */


#include<iostream>

usingnamespace std;


int main()

{

int a[2][3] = {{1,2,3},{4,5,6}};

int b[3][2];

int i,j;

cout<<"array a:"<<endl;

 

for(i=0;i<=1;i++)

{

for(j=0;j<=2;j++)

{

cout<<a[i][j]<<"";

b[j][i]=a[i][j];

}

cout<<endl;

}

cout<<"array b:"<<endl;

 

for(i=0;j<=1;j++)

{

cout<<b[i][j]<<"";

cout<<endl;

}

return 0;

}

======================

擂台法求二维数组最大值,即求二维数组矩阵的最值问题:

思路:求最值方法很多,现在使用“打擂台”的算法。

如果有若干人比武,先一个人站在台上,与另一个人交手,

败者下台,胜者留台。依次进行比武。最后留在台上的就是

胜者。

--------------------------------

开始把a[0][0]的值赋给变量max,max就是开始时的擂主,

让后让下一个元素与它进行比较,将二者中最大者保存

在max中,然后再让下一个元素与新的max比较,直到最后一个

元素比完为止。max最后的值就是数组所有元素中的最大值。

程序如下:

//============================================================================

// Name        : C++_array.cpp

// Author      : yangbo_hbzjk

// Version     :

// Copyright   : Your copyright notice

// Description : Hello World in C++, Ansi-style

//============================================================================

#include <iostream>

using namespace std;


int main()

{

int a[5][6]={

    {56,23,2,3,4,87},{12,13,15,45,26,45},

    {99,85,64,56,123,45},{123,456,78,56,45,21},

    {25,12,56,35,45,789}

          };

int colum=0,row=0,max;


max=a[0][0];       //使max开始时取a[0][0]的值

for(int i=0;i<5;i++)    //从第0行~第2行

{     

for(int j=0;j<6;j++)    //从第0列~第3列

{

if(a[i][j]>max)     //如果某元素大于max

{

max=a[i][j];    //max将取该元素的值

row=i;          //记下该元素的行号i

colum=j;        //记下该元素的列号j

  }

}

}

cout<<"max="<<max<<endl<<"row="<<row<<endl<<"colum="<<colum<<endl;

return 0;

}



用行列式的定义方法求解n阶行列式的值(C++)

用行列式的定义方法求解行列式的值,方法肯定不是最简单的,但是觉得有趣。其中要用到全排列的递归算法、逆序数的算法 #include using namespace std; const int n =...
  • QianYiYu
  • QianYiYu
  • 2017年03月15日 22:27
  • 1777

【动态规划】求二维数组从左下到右上的最优路径

1.求二维数组从左下到右上的最优路径,使得路径和最大,并且只能向上或向下走。 解析:求最短路径,路径和最优等都可以用动态规划做。 dp[i][j]表示到i,j坐标的最优路径。 第一,确定初始条件...
  • z702143700
  • z702143700
  • 2015年09月30日 20:41
  • 1546

2.6使用二维数组存储学生的数据,包括学号、姓名、操作系统成绩、Java成绩、高数成绩、总分;一行存储一个学生的数据;要求输入若干学生的数据,求出总分;然后按照总分由高到低重新排列;输出排序后的结果

摩尔的Java学习笔记2.6 使用二维数组存储学生的数据,包括学号、姓名、操作系统成绩、Java成绩、高数成绩、总分;一行存储一个学生的数据;要求输入若干学生的数据,求出总分;然后按照总分由高到低重新...
  • xuexueloveair
  • xuexueloveair
  • 2017年04月02日 22:31
  • 1560

二维数组最大值最小值

  • 2017年06月23日 10:13
  • 2KB
  • 下载

用行指针为函数形参来实现对该二维数组求最大值

注意:二维数组名是行指针 /* 定义一个二维数组,写函数来实现对该二维数组求最大值。 (要求,用行指针为函数形参) */ #include using namespace std; ...
  • smallgyy
  • smallgyy
  • 2012年12月24日 19:47
  • 1093

求二维数组中的最大值 最小值及其下标

/* *程序的版权和版本声明部分: *Copyright(c)2013,烟台大学计算机学院学生 *All rights rese...
  • u012369373
  • u012369373
  • 2013年12月19日 14:12
  • 1541

求二维数组中最大最小值及行列号

  • 2014年02月20日 17:37
  • 955B
  • 下载

定义一个二维数组,写函数来实现对该二维数组求最大值。(要求,用行指针为函数形参)

// 121219 上机任务3.cpp : 定义控制台应用程序的入口点。 // /* * Copyright (c) 2012, 烟台大学计算机学院 * All ...
  • liubinzi123
  • liubinzi123
  • 2012年12月19日 20:46
  • 4341

poj1050-求二维数组子数组和的最大值

题意:给定一个二维数组,值有正有负,矩阵的规模不超过100*100,矩阵元素在-127到127之间,求该二维数组的一个子数组,使得该数组的元素之和在所有的子数组中是最大的。 解法一: 对整个矩阵进...
  • wang11234514
  • wang11234514
  • 2014年03月07日 21:52
  • 814

子函数求取二维数组每一行的最大值

子函数求取二维数组每一行的最大值
  • xhoufei2010
  • xhoufei2010
  • 2015年03月26日 15:25
  • 649
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++数组进阶——二维数组的应用及行列互换存储思路,擂台法求最大值
举报原因:
原因补充:

(最多只允许输入30个字)