算法:求矩阵的最大值及其下标(10分)
题目内容:
使用二维数组将一个 m×n 的矩阵中所有元素的最大值及其下标获取。如果数据中有相同的数据,请输出以行优先的顺序输出时先输出的那个值。通过该程序,掌握二维数组使用的相关知识
输入格式:
输入矩阵的行列值
输入数据
输出格式:
最大值及其下标
输入样例:
3 4
1 2 3 4 5 6 7 99 9 10 11 12
输出样例:
max=a[1][3]=99
输入样例:
3 4
1 2 3 4 5 6 7 99 9 10 11 99
输出样例:
max=a[1][3]=99
本次作业,要求输出以行优先的顺序输出时先输出的那个值,这其实本来是个难度的设计点,只要改成“后输出的那个值”或者说“以列优先后输出的那个值”。
如果是这样,定义一个max[m](或者是max[n])的数组存放每行(或者每列)的最大值,然后按题目要求从前开始(或者从后开始)扫描,识别到就break即可
代码如下:
#include<iostream>
using namespace std;
int main()
{
int m,n;
cin>>m>>n;
int a[m][n],i,j,max[m],top,flag=1;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cin>>a[i][j];
}
}//输入矩阵
for(i=0;i<m;i++)
{
max[i]=a[i][0];
for(j=0;j<n;j++)
{
if(max[i]<a[i][j])
{
max[i]=a[i][j];
}
}
}//寻找行最大值
top=max[0];
for(i=0;i<m;i++)
{
if(top<max[i])
{
top=max[i];
}
}//寻找矩阵最大值
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(top==a[i][j])
{
cout<<"max=a["<<i<<"]["<<j<<"]="<<top<<endl;
flag=0;//外面还有一层,给flag赋值便于下一步打破
break;
}
}//逐行查找,找到就打破循环
if(!flag)break;
}
return 0;
}