计算鞍点

chenjiangxue 逗比 2019-08-20 17:11:36 2019-11-12 3:46:18 1

//以下是鞍点的计算代码,只供参考(后附思路) #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;” 。

{{ vote && vote.total.up }}

共 4 条回复

luffy 路飞AFO
#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;
}
chenjiangxue 逗比

希望对你有帮助

chenjiangxue 逗比

^.^

root 站长

棒!