问题:找出一个二维数组(以三行四列的数组为例)中的鞍点,即该位置上的元素在该行上值最大,在该列上值最小(也可能没有鞍点)
输入形式:
标准输入:二维数组(以三行四列的数组为例)
输出形式:
标准输出:如果有鞍点,输出鞍点的值及所在行列(例如[1][2]=96 is Saddle Point),如果没有,输出没有鞍点(例如 No Saddle Point)
代码:
#include<iostream>
using namespace std;
int main()
{
int a[3][4];
for(int i = 0;i < 3;i++) //for循环输入
{
for(int j = 0;j < 4;j++)
cin>>a[i][j];
}
int i = 0,num = 0;
bool flag = true;
//寻找每行的最大值,其值标记为max,其列标记为temp后,在该列逐个比较——如果max是该列的最小值,则输出该点的位置;反之,搜索下一行,直至结束
for(;i < 3;i++)
{
int max = 0,temp;
for(int j=0;j < 4;j++)
{
if(a[i][j] > max)
{
max = a[i][j];
temp = j;
}
}
for(int m = 0;m < 3;m++)
{
if(a[m][temp] < max)
flag = false;
}
//当max不是该列的最小值时,跳出该层循环,执行下一层
if(flag == false)
{
flag = true;
continue;
}
else
{
cout<<"["<<i<<"]"<<"["<<temp<<"]"<<"="<<max<<" is Saddle Point";
num++;
}
}
//当flag为false,且输出的鞍点数为0时,输出"No Saddle Point"
if(flag == false && num != 0)
cout<<"No Saddle Point"<<endl;
return 0;
}