【问题描述】在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。任意输入一个3行3列矩阵,请设计程序输出其鞍点。
【输入形式】每行3个数,输入3列
【输出形式】输出所有鞍点;如果没有鞍点,输出“No”
【样例输入1】
7 8 9
4 5 10
3 2 11
【样例输出1】[0][2],9
【样例输入2】
3 3 2
4 6 8
5 7 9
【样例输出2】
[0][0],3
[0][1],3
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
/*【问题描述】在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。
任意输入一个3行3列矩阵,请设计程序输出其鞍点。
【输入形式】每行3个数,输入3列
【输出形式】输出所有鞍点;如果没有鞍点,输出“No”*/
void find(int a[3][3], int i, int index)
{
int flag = 0;
int min = a[i][index];
for (int m = 0; m < 3; m++)
{
if (a[m][index] < min)
{
flag = 1;
break;
}
}
if (flag == 0)
{
printf("[%d][%d] %d\n", i, index, a[i][index]);
}
}
int main()
{
int a[3][3];
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
scanf("%d", &a[i][j]);
}
}
for (int i = 0; i < 3; i++)
{
int max = a[i][0];
int index = 0;
//找出一行最大值,并保存下标
for (int j = 1; j < 3; j++)
{
if (a[i][j] > max)
{
index = j;
max = a[i][j];
}
}
//判断是否是该列最小值,即判断鞍点
find(a,i,index);
//特殊情况,一行最大值不止一个
for (int j = 1; j < 3; j++)
{
if (a[i][j] == max && j != index)
{
index = j;
}
}
find(a, i, index);
}
return 0;
}
新手小白,通过csdn记录自己刷过的易错题~