题目
编写一个函数,对给定的一个m*n的矩阵A,统计这个矩阵中具有以下特征的元素个数,该元素既是所在行的最大值(最小值),又是所在列的最大值(最小值),打印出来这些特殊元素以及其坐标
函数
// An highlighted block
void sort(int A[m][n])//输出格式:先输出所在行列是最小值的元素:先输出这个特殊值,在输出它的位置,然后换行;在输出是最大值的元素
{
//造两个数组min[m],max[m],存储每一行的最小值和最大值,并记录其位置坐标
Location min[m],max[m];
//初始化
for(int i=0;i<m;++i)
{
min[i].val=A[i][0];
max[i].val=A[i][0];
}
//找到每一行的特殊值并记录其位置,本题所求特殊值只能从它们之间来
for(int i=0;i<m;++i)
{
for(int j=0;j<n;++j)
{
if(A[i][j]<min[i].val)
{
min[i].val=A[i][j];
min[i].column=j;
}
if(A[i][j]>max[i].val)
{
max[i].val=A[i][j];
max[i].column=j;
}
}
}
cout<<"maxVlaue"<<" "<<"locate"<<endl;
//设置最大值最小值计数器
int mincount=0,maxcount=0;
//最大特殊值
for(int i=0;i<m;++i,maxcount=0)//m对特殊值值遍历,找合格的
{
for(int j=0;j<m;++j)//m行
{
if(max[i].val>=A[j][max[i].column])
{
++maxcount;
}
}
if(maxcount==m)
{
cout<<max[i].val<<" ("<<i<<","<<max[i].column<<")"<<endl;
}
}
cout<<endl;
cout<<"minValue"<<" "<<"locate"<<endl;
//最小特殊值
for(int i=0;i<m;++i,mincount=0)//m对特殊值值遍历,找合格的
{
for(int j=0;j<m;++j)//m行
{
if(min[i].val<=A[j][min[i].column])
{
++mincount;
}
}
if(mincount==m)
{
cout<<min[i].val<<" ("<<i<<","<<min[i].column<<")"<<endl;
}
}
}
完整源码
#include<iostream>
using namespace std;
#define m 3
#define n 4
void sort(int A[m][n]);
typedef struct Location{
int val;
int column;//只记录列号即可
}Location;
int main()
{
int A[3][4]={{1,2,3,98},{0,2,4,9},{1,2,343,55}};
sort(A);
return 0;
}
void sort(int A[m][n])//输出格式:先输出所在行列是最小值的元素:先输出这个特殊值,在输出它的位置,然后换行;在输出是最大值的元素
{
//造两个数组min[m],max[m],存储每一行的最小值和最大值,并记录其位置坐标
Location min[m],max[m];
//初始化
for(int i=0;i<m;++i)
{
min[i].val=A[i][0];
max[i].val=A[i][0];
}
//找到每一行的特殊值并记录其位置,本题所求特殊值只能从它们之间来
for(int i=0;i<m;++i)
{
for(int j=0;j<n;++j)
{
if(A[i][j]<min[i].val)
{
min[i].val=A[i][j];
min[i].column=j;
}
if(A[i][j]>max[i].val)
{
max[i].val=A[i][j];
max[i].column=j;
}
}
}
cout<<"maxVlaue"<<" "<<"locate"<<endl;
//设置最大值最小值计数器
int mincount=0,maxcount=0;
//最大特殊值
for(int i=0;i<m;++i,maxcount=0)//m对特殊值值遍历,找合格的
{
for(int j=0;j<m;++j)//m行
{
if(max[i].val>=A[j][max[i].column])
{
++maxcount;
}
}
if(maxcount==m)
{
cout<<max[i].val<<" ("<<i<<","<<max[i].column<<")"<<endl;
}
}
cout<<endl;
cout<<"minValue"<<" "<<"locate"<<endl;
//最小特殊值
for(int i=0;i<m;++i,mincount=0)//m对特殊值值遍历,找合格的
{
for(int j=0;j<m;++j)//m行
{
if(min[i].val<=A[j][min[i].column])
{
++mincount;
}
}
if(mincount==m)
{
cout<<min[i].val<<" ("<<i<<","<<min[i].column<<")"<<endl;
}
}
}