【好题分享】求鞍点

文章介绍了如何用C语言编程找出一个3行4列的二维数组中的鞍点,即数组中某个元素在同一行中最大且在同一列中最小。通过定义两个辅助数组,分别标记行的最大值和列的最小值,然后找出同时被标记两次的点作为鞍点。代码中包含了详细的逻辑解释和实现过程。
摘要由CSDN通过智能技术生成

题目: 求鞍点:求出一个3行4列的二维数组中鞍点及其所在行与列(鞍点:即该位置上的元素在该行中最大,在该列中最小。)

思路:

1.定义二维数组
2.标记一行中的最大元素
3.标记一列中的最小元素
4.被标记2次的点就是鞍点

代码实现

#define r 3
#define c 4
int main()
{
	int a[r][c], b[r][c] = { 0 };
	//数组a为所给二维数组,数组b用来标记a
	int i, j; //i,j循环变量
	int max, min;  //标记行中最大值,列中最小值
	int rmax, cmax, rmin, cmin; //最大/小值坐标
	//实现思路1
	for (i = 0; i < r; i++)
	{
		for (j = 0; j < c; j++)
		{
			scanf("%d", &a[i][j]);
		}
	}
	//寻找每行中最大元素(思路2)
	for (i = 0; i < r; i++) //遍历每一行
	{
		max = a[i][0]; //最大值为该行首元素
		rmax = i;
		cmax = 0;
		for (j = 1; j < c; j++)
		{
		     //比较max和max右方一个元素
			if (max < a[i][j])
			{
				max = a[i][j];
				rmax = i;
				cmax = j;
			}
		}
		b[rmax][cmax]++; //标记该行最大元素
	}
	//寻找每列最小元素(思路3)
	for (i = 0; i < c; i++)//遍历每一列
	{
		min = a[0][i]; //最小值初始化为该列第一行元素
		rmin = 0;
		cmin = i;
		for (j = 1; j < r; j++)
		{	
			//比较min和min下方元素
			if (min > a[j][i])
			{
				min = a[j][i];
				rmin = j;
				cmin = i;
			}
		}
		b[rmin][cmin]++;//标记每一列最小元素
	}
	for (i = 0; i < r; i++)
	{
		for (j = 0; j < c; j++)
		{
			if (b[i][j] == 2) //实现思路4
			{
				printf("ROW:%d  COLUNMN:%d\n", i, j);
				printf("The Point is %d\n", a[i][j]);
			}
		}
	}
	return 0;
}

总结

要善于标记具有某一种特性的变量,最后靠是否具有标记来输出满足条件的结果

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值