#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//问题描述
//若一个矩阵中的某元素在其所在行最小而在其所在列最大,则该元素为矩阵的一个马鞍点。
//请写一个程序,找出给定矩阵的马鞍点。
//
//输入说明
//输入数据第一行只有两个整数m和n(0 < m < 100, 0 < n < 100),分别表示矩阵的行数和列数;
// 接下来的m行、每行n个整数表示矩阵元素(矩阵中的元素互不相同),整数之间以空格间隔。
//
//输出说明
//在一行上输出马鞍点的行号、列号(行号和列号从0开始计数)及元素的值(用一个空格分隔),之后换行;
//若不存在马鞍点,则输出一个字符串“no”后换行。
//
//输入样例
//4 3
//11 13 121
//407 72 88
//23 58 1
//134 30 62
//
//输出样例
//1 1 72
int main()
{
int n = 0;
int m = 0;
int arr[100][100] = { 0 };
//输入
scanf("%d %d", &n, &m);
int i = 0;
for (i = 0; i < n; i++)
{
int j = 0;
for (j = 0; j < m; j++)
{
scanf("%d", &arr[i][j]);
}
}
int x = 0;
int y = 0;
int count = 0;
for (x = 0; x < n; x++)
{
for (y = 0; y < m; y++)
{
int max = arr[x][y];
int min = arr[x][y];
//在行找最小
int i = 0;
for (i = 0; i < m; i++)
{
if (arr[x][i] < arr[x][y])
{
min = arr[x][i];
}
}
//在列找最大
int j = 0;
for (j = 0; j < n; j++)
{
if (arr[j][y] > arr[x][y])
{
max = arr[j][y];
}
}
if (min == arr[x][y] && max == arr[x][y])
{
printf("%d %d %d", x, y, arr[x][y]);
count++;
}
}
}
if (count == 0)
{
printf("no\n");
}
return 0;
}
XDOJ马鞍点
最新推荐文章于 2024-08-22 17:27:46 发布