C语言鞍点数组改进版

编程入门 行业动态 更新时间:2024-10-15 22:24:25

C语言鞍点<a href=https://www.elefans.com/category/jswz/34/1771288.html style=数组改进版"/>

C语言鞍点数组改进版

题目内容:

给定一个n*n矩阵A。矩阵A的鞍点是一个位置(i,j),在该位置上的元素是第i行上的最大数,第j列上的最小数。一个矩阵A也可能没有鞍点。

你的任务是找出A的鞍点。

改进目标:

网络上很多视频和博客都没有考虑到如果某一行最大数值MAX出现相等的情况,极端一点,当数组元素全部相等的时候,所有的点其实都是鞍点,以下程序是我针对这一问题做的一些改进

ps: 提问了B站讲课的up主老师,他的意思是如果出现一行上最大的元素相等的情况,这个数组就没有鞍点了。因为是最大值,“最”就限定了它不能有多个相同的。有相同的最大值就不是“最”了,只能是最大值之一。

他说的好像也挺有道理,哈哈哈哈,这就属于语文问题了。C语言程序问题很多都有歧义,主要是理解算法思想最重要,我的程序也只是给大家一个小小的参考,如果有其他想法的可以在下面评论区讨论,一起学习进步,欧力给!

#include<stdio.h>
#define M 4
#define N 4
//用来存放鞍点坐标的结构体
struct zuobiao
{int row[M];int colum[N];int n;
}zb;int main() {int a[M][N] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };//实验数据//int a[M][N] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, };//实验数据//int a[M][N] = { 1, 2, 3, 4, 5, 6, 7, 9, 9, 0, 1, 7, 3, 4, 5, 6, };//实验数据int max, min;int flag1 = 0, flag2 = 0;int j;//输出数组for (int i = 0; i < M; i++) {for (j = 0; j < N; j++) {printf("%5d", a[i][j]);}printf("\n");}//鞍点for (int i = 0; i < M; i++) {max = a[i][0];zb.row[0] = i, zb.colum[0] = 0;zb.n = 1;for (j = 1; j < N; j++) {if (a[i][j] > max) {zb.n = 1;max = a[i][j];zb.row[zb.n -1] = i;zb.colum[zb.n -1] = j;}else if (a[i][j] == max) {zb.n ++;max = a[i][j];zb.row[zb.n - 1] = i;zb.colum[zb.n - 1] = j;}}min = max;for (j = 0; j < zb.n; j++){flag1 = 0;for (int k = 0; k < M; k++) {if (a[k][zb.colum[j]] < min) {flag1 = 1;break;}}if (!flag1) {flag2 = 1;printf("鞍点%d的行: %d   列: %d\n", max, zb.row[j], zb.colum[j]);}}		}if (!flag2) {printf("该数组没有鞍点\n");}return 0;
}

更多推荐

C语言鞍点数组改进版

本文发布于:2023-11-30 13:36:11,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1650805.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数组   改进版   语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!