#例题
链接:https://ac.nowcoder.com/acm/contest/93957/E 来源:牛客网
题目描述
给定一个m*n的矩阵,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。例如:在下面的例子中(第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
如果存在鞍点,输出鞍点所在的行、列及其值,如果存在多个,先输出行数更小的,行数相同,先输出列数最小的,如果不存在,输出"No"。
输入描述: 第1行:2个数m,n,对应矩阵的行列数量
(2<=m, n<=100) 第2-m+1行:每行n
个数中间用空格分隔(0<=m(i,j)
<=1000)
输出描述:
如果存在t个鞍点,输出共t行,每行3个 数,对应所在的行、列及其值,如果不存 在鞍点,输出"No"
示例1
输入
5 5
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
输出
4 1 8
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <iostream>
#include <vector>
#include <new>
#include<algorithm>
#include <cmath>
#include <cstdlib>
#define PI 3.14
using namespace std;
int main()
{
int m,n,flag=0;
int x=0;
cin>>m>>n;
int a[m][n];
for(int i=0;i<m;i++){
for(int g=0;g<n;g++)cin>>a[i][g];
}
int max1;
int max;
for(int i=0;i<m;i++){
flag=0;
max=0;
max1=a[i][0];
//x=0;
for(int g=1;g<n;g++){
if(max1<a[i][g]){
max=g;
max1=a[i][g];
}
}
flag=1;
for(int g=0;g<m;g++){
if(a[i][max]>a[g][max]){
flag=0;
}
}
if(flag){
cout<<i+1<<" "<<max+1<<" "<<max1<<endl;
flag=1;
x++;
//return 0;
}
// else cout<<"No"<<endl;
}
if(x==0)
cout<<"No";
return 0;
}
#知识点储备
vector动态数组
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <iostream>
#include <vector>
#include <new>
#include<algorithm>
#include <cmath>
#include <cstdlib>
#define PI 3.14
using namespace std;
int main()
{
int m,n;
cin>>m>>n;
vector< vector < int > >(m,vector<int>(n));
return 0;
}
有的题目不能用arr[m][n]这个样子声明数组,因为此时m,n为动态变量,一个数组的行数和列数在定义的时候应该是一个固定的量。