#本篇文章创作灵感来自于今天的一次上机考试#
考试之前已经知道了考试题目是找鞍点
但是看到考题之后有A B两种选择
如果选择用题目的方式去做 最高100(A)
无函数实现则最高80(B)
当时选择了第一种(A)
但是出机房发现做错了
现在捋清了思路 发一篇博客记录一下
#下面是正文部分#
大致思路就是
1.定义一个全局变量的数组,来存放鞍点的行和列(只考虑了只存在一个鞍点的情况)
2.用一个返回类型是指针 的函数来完成(指针里面存放的是全局变量的首地址)
#include<stdio.h>
//定义全局变量,来存放鞍点的行和列
int b[2] = {-1,-1};
//进行函数的声明
int* my_found(int a[3][3]);
int main()
{
int a[3][3];
int i = 0;
int j = 0;
//1.开始输入数据
for(i=0;i<3;i++)
{
printf("请输入第%d行的数据:>",i+1);
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}
int* p = my_found(a);
if(*p==-1)
{
//数组b中存的本来都是-1
//如果仍然是 -1 说明没有找到鞍点
printf("not found\n");
}
else
{
printf("鞍点的行是%d\n",*p);
printf("鞍点的列是%d\n",*(p+1));
}
return 0;
}
//函数的实现
int* my_found(int a[3][3])
{
int i = 0;
int j = 0;
int k = 0;
int t = 0;
int* p = b;//这里p指向数组b的首地址
int max = 0;
for(i=0;i<3;i++)
{ //开始逐行找
max = a[i][0];//现在我们把 这一行的第一个数当作最大数
for(j=0;j<3;j++)
{
if(a[i][j]>max)
{
max = a[i][j];
t = j;//把列数存起来
}
}
for(k=0;k<3;k++)
{
if(max>a[k][t])//当max比这一列的其他数字大时 他就不是鞍点了
{
break;
}
}
if(k==3)
{
//这个时候循环结束 没有被break中止
//说明没有找到更小的值 max就是这一列最小的值
//此时的行和列就是下标了
*p = i;
*(p+1) = t;
}
}
//无论如何最终都返回首地址
return p;
}
示例1:
:
示例2: