//以下是鞍点的计算代码,只供参考(后附思路) #include //头文件随便
using namespace std;
#define N 5 //题目说是5*5的,直接定义就好了。
int a[N][N]; //定义矩阵
int main() {
int Max, Min, Ni, Nj;
int q = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++)
cin >> a[i][j];
}
int i, j;//也可以在里面定义
for ( i = 0; i < N; i++) {
Max = a[i][0];
for ( j = 0; j < N; j++) {
if (a[i][j]>=Max) {
Ni = i;
Nj = j;
Max = a[i][j];
}
}
Min = Max;
for (int k = 0; k < N; k++) {
if (a[k][Nj] < Min)
Min = a[k][Nj];
}
if (Max == Min) {
q = 1;
cout << Ni+1 << " " << Nj+1 << " " << Max << endl;
break;
}
}
if (q == 0)
cout << "not found"; //没有,输出xxx
return 0;
}
思路:先找出每一行最大数的列,然后在该列找最小数的行,如果该最小数的行和循环行相同,则是鞍点;输出行列时,要分别加1;定义两个函数,分别表示某个点是否在那一行为最大,在那一列为最小,如果满足条件就“return 0;” 。
共 4 条回复
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long int a[20][20];
for(int i=1;i<=5;i++)
for(int j=1;j<=5;j++)
{
cin>>a[i][j];
}
bool ok=0;
for(int i=1;i<=5;i++)
{
int x=a[i][1],ans1=i,ans2=1;
for(int j=1;j<=5;j++)
{
if(x<a[i][j])
{
x=a[i][j];
ans1=i;
ans2=j;
}
}
int y=a[1][ans2];
for(int k=1;k<=5;k++)
{
if(y>a[k][ans2])
{
y=a[k][ans2];
}
}
if(x==y)
{
cout<<ans1<<" "<<ans2<<" "<<x;
ok=1;
break;
}
}
if(ok==0)
{
cout<<"not found";
}
return 0;
}
希望对你有帮助
^.^
棒!