- 问题描述:有一个3*4的整数矩阵,使用二维数组表示。
要求:通过两层循环(一次遍历所有元素)找到并输出所有的最大值和它们的位置。
- 代码如下:
#include <iostream>
using namespace std;
int main()
{
int a[3][4],row[12],column[12];
int i,j,k=0,ma;
for(i=0;i<3;i++){ //输入数组
for(j=0;j<4;j++){
cin>>a[i][j];
}
}
ma=a[0][0]-1; //初始化ma的值
for(i=0;i<3;i++){
for(j=0;j<4;j++){
if(ma<a[i][j]){ //碰到比自己大的就刷新最大值和位置
ma=a[i][j];
row[0]=i;
column[0]=j;
k=0;
}
else if(ma==a[i][j]){ //碰到相等的就记录第k+1个"最大值"的位置
k++;
row[k]=i;
column[k]=j;
}
}
}
for(i=0;i<=k;i++){ //输出
cout<<"max="<<ma<<", row="<<row[i]<<", column="<<column[i]<<endl;
}
return 0;
}
- 思路分析(个人表达能力不强):难点在于记录第二、三、四......个最大值的位置,我们要让它碰到比自己大的值就“抛弃”掉原来的最大值和位置。我曾纠结于如果前面的相等的数个数比最大值相等的个数多,那怎样删除前者所有的位置呢?后来,我发现根本不需要删除,直接不输出就行了,覆盖了多少就输出多少。
欢迎大家提出修改意见!
Progress everyday!