描述
给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。
例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8)。
11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8 6 4 7 2
15 10 11 20 25
输入
输入包含一个5行5列的矩阵。
输出
如果存在鞍点,输出鞍点所在的行、列及其值,如果不存在,输出"not found"。
输入样例 1
11 3 5 6 9
12 4 7 8 10
10 5 6 9 11
8 6 4 7 2
15 10 11 20 25
输出样例 1
4 1 8
using namespace std;
int main()
{
int a[5][5], max, t, count;
bool flag = false;
cout<<"请输入5x5数组的数值:"<<endl;
for(int i = 0; i < 5; i++) {
for(int j = 0; j < 5; j++) {
cin>>a[i][j];//循环输入二维数组
}
}
for(int i = 0; i < 5; i++) {
count = 0;//记录是否为本列的最大值
t = 0;//记录本行最大值所在列的下标
max = a[i][0];//记录最大值,首先赋值为本行的第一列的值
for(int j = 1; j < 5; j++) {//从第二列的值开始判断
if (a[i][j] > max) {//如果大于当前最大值
max = a[i][j];//赋值最大值
t = j;//赋值本行最大值所在列的下标
}
}
for(int z = 0; z < 5; z++) {//判断最大值所在列是否为本列最小值
if(max > a[z][t]) {//如果最大值大于某一个数字
count++;//count+1,表示本行最大值在本列中不是最小值
break;//跳出当前循环
}
}
if (count == 0) {//如果count=0,表示本行最大值在本列是最小值
cout<<i+1<<" "<<t+1<<" "<<max<<endl;//输入行、列和鞍点值
flag = true;//设置flag为true,表示存在鞍点
}
}
if(!flag) {//如果flag为false,表示没有鞍点
cout<<"无鞍点"<<endl;
}
return 0;
}
执行结果:
细节!厉害呢小哥哥