找出一个2维数组中的鞍点:该位置上的元素在该行最大,在该列上最小,也可能没有鞍点。谭浩强《C程序设计课后习题》第6章第8题

题目

本题是谭浩强《C程序设计课后习题》第6章第8题。
题目:找出一个2维数组中的鞍点:该位置上的元素在该行最大,在该列上最小,也可能没有鞍点。

例子:
9  6  8  70
10 23 55 66
15 67 4  69
其中66为鞍点并且唯一。

以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步。——来自考研路上的lwj

一、解题思路

思路:
1.我们采用3重for循环来进行遍历:
第一个for循环用于行数的循环次数
第二个for循环用于寻找到当前行最大的元素,循环范围是0-3
第三个for循环用于寻找该最大元素里的列最大元素,循环范围0-2;
2.定义flag,初值为0,是状态变量,当行最大元素=列最大元素时将其设为1,如果循环结束,flat依然等于0的话,就输出没有鞍点。
3.下面开始写具体的代码实现:本题的数组范围采用二维数组a[3][4],用户输入的方式。

二、代码部分

1.引入库

代码如下(示例):

#include<stdio.h>

2.主函数部分

代码如下(示例):

int main() {
	int i, j, p;
	int flat = 0;//定义flag,初值为0,是状态变量,当行最大元素=列最大元素时将其设为1,如果循环结束,flat依然等于0的话,就输出没有鞍点。
	int a[3][4] = { 0 };
	int max = 0;
	printf("请输入一个3行4列的二维数组:\n");
	for (i = 0; i <= 2; i++)
		for (j = 0; j <= 3; j++)
			scanf("%d", &a[i][j]);
	for (i = 0; i <= 2; i++)
	{
		max = a[i][0];
		for (j = 0; j <= 3; j++)
		{
			if (max < a[i][j])
//判断是否为该行最大的元素,不是的话拿其值并存其列号,以便于寻找是否为该列最小元素。
			{
				max = a[i][j];
				p = j;
			}
		}
		for (j = 0; j <= 2; j++)
		{
			if (max > a[j][p])
//判断是否为该列最小,如果大于任何一个元素就不是最小了,直接退出循环。
			{
				break;
			}
		}
		if (j == 3)
		{
			printf("----------已经找到鞍点,为:%d------------\n", a[i][p]);
			flat = 1;
			break;
		}
	}
	if (flat == 0)
	{
		printf("没有鞍点。");
	}

	printf("你输入的数组为:\n");
	for (i = 0; i <= 2; i++)
	{
		for (j = 0; j <= 3; j++)
			printf("%d ", a[i][j]);
		printf("\n");
	}
	return 0;
}


三、执行结果

在这里插入图片描述
输入:

9 6 8 70
10 23 55 66
15 67 4 69

输出:

----------已经找到鞍点,为:66------------
你输入的数组为:
9 6 8 70
10 23 55 66
15 67 4 69
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立志冲海大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值