C语言谭浩强习题—计算鞍点
C语言程序设计第五版第六章节 第八题: 找出一个二维数组中的鞍点,即该位置上的元素在该行最大,在该列最小。也可能没有鞍点。
个人代码:
#include<stdio.h>
#define n 4
#define m 4
int main()
{
int i,j = 0;
int arr[n][m] = { 0 };
for (i = 0; i < n; i++)
{
for (j = 0; j < m; j++)
{
scanf("%d", &arr[i][j]);
}
}
for (i = 0; i < n; i++)//
{
int left = 0;
int right = m - 1;
while (left < right)//找一行中最大的元素 但是没考虑有相等元素(考虑了也没写出来)
{
if (arr[i][left] > arr[i][right])//用if比较找出每行最大元素的下标
{
right--;//
}
else
{
left++;
}
}
//结束后 left和right应是相等的都是一行中行最大值的列的下标
for (j = 0; j < n; j++)
{
if (arr[i][left] > arr[j][left])//运用break和if来判断是不是这一列中最小的
{
break;
}
}
if (j == n)//如果j==n证明遍历到了最后没有break跳出循环,if条件不满足,arr[i][left]就是这一列中最小的 。
{
printf("鞍点坐标是: %d %d", i+1, left+1);//+1是为了更直观的看出结果
}
}
printf("\n");
for (i = 0; i < n; i++)//打印一下方便观看
{
for (j = 0; j < m; j++)
{
printf("%2d", arr[i][j]);
}
printf("\n");
}
return 0;
}
![](https://img-blog.csdnimg.cn/cdf203200f4d45828287ae661a2294ef.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81NzQ2Mzc4NA==,size_16,color_FFFFFF,t_70#pic_center)
`
|