找出二维数组中的鞍点
要做这道题的前提是我们要知道什么是鞍点。
鞍点:是在当前位置上的元素在该行上最大在该列上最小。有的数组可能没有鞍点
比如 这张图片中 66 就是 这个二维数组中的鞍点。它当前行中最大,又在当前列中最小
做这道题我们还要知道的点就是二维数组中不考虑重复的情况,如果鞍点存在,该鞍点一定是唯一的,即一个二维数组中只有一个鞍点
接下来看代码,代码中有详细介绍
int main()
{
int i, j;
int arr[3][4] = { 0 };
int max = 0;
int flag = 0;//如果找到了鞍点给它赋值 1
//输入一个二维数组
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4;j++)
{
scanf("%d", &arr[i][j]);
}
}
//找鞍点
for (i = 0; i < 3; i++)
{
//让max等于二维数组第 i 行的第一个元素
max = arr[i][0];
//记录最大值所在的列
int t = 0;
//找出一行中的最大值并把值赋给 max
for (j = 1; j < 4; j++)
{
if (arr[i][j] > max)
{
max = arr[i][j];
t = j;
}
}
//判断 max 是否为该列上最小的元素
for (j = 0; j < 3; j++)
{
//上边的 t 记录了 max 所在的列
//所以用 max 与该列的元素比较,看 max 是否为该列上最小的元素
if (max > arr[j][t])
{
//如果大于就跳出
break;
}
}
//如果全部比较完(也就是j==3的时候)说明 max 为当列最小,max为鞍点
if (j == 3)
{
printf("找到了鞍点在:%d行%d列,为%d\n", i, j,arr[i][t]);
flag = 1;
break;//因为只有一个鞍点,所以找到了就退出循环
}
}
if (flag != 1)
{
printf("没有找到鞍点 \n");
}
return 0;
}
运行结果
看到这个结果可不要惊讶,以为做错了!
别忘了数组下标是以0开始的文章来源:https://www.toymoban.com/news/detail-757596.html
拜~~文章来源地址https://www.toymoban.com/news/detail-757596.html
到了这里,关于C语言找鞍点(详细讲解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!