C语言 每日一题 PTA 10.25 day4

编程入门 行业动态 更新时间:2024-10-27 12:41:33

C<a href=https://www.elefans.com/category/jswz/34/1770116.html style=语言 每日一题 PTA 10.25 day4"/>

C语言 每日一题 PTA 10.25 day4

10.25
求解马鞍点问题
若矩阵Anm中某个元素A[i][j]是矩阵第i行中值最小的元素,同时又是第j列中值最大的元素,则称元素A[i][j]是矩阵中的一个马鞍点。
设以二维数组存储矩阵,编写算法求矩阵A中的所有马鞍点,算法的时间复杂度要尽量的低。
注意当最大值(最小值)并列相等时,会出现多鞍点的情况。
输入格式 :
第一行输入矩阵的总行数M和总列数N,以空格间隔。
之后的M行,依次输入矩阵的各行数据,以空格间隔。
输出格式 :若有马鞍点,则以行序为主序,依次输出各个马鞍点。
每个马鞍点以(row, col, val)的形式输出,其中row 代表马鞍点的行号,col代表马鞍点的列号,val代表马鞍点的值。
若无马鞍点,则输出“NONE”。

#include <stdio.h>
#define Mmax 100
#define Nmax 100int main()
{int M, N;int i, j, k, b = 0, min, t = 0;int A[Mmax][Nmax];int B[Nmax];scanf("%d %d", &M, &N);for (i = 0; i < M; i++){for (j = 0; j < N; j++){scanf("%d", &A[i][j]);}}for (i = 0; i < M; i++){min = A[i][0];B[t] = 0;t++;for (j = 1; j < N; j++){if (A[i][j] < min){min = A[i][j];t = 0;B[t] = j;t++;}else if (A[i][j] == min){B[t] = j;t++;}}for (k = 0; k < t; k++){int y, l = 0;int x = B[k];for (y = 0; y < M; y++){if (min < A[y][x]){l = 1;}}if (l == 0){printf("(%d,%d,%d)", i + 1, x + 1, min);b = -1;}}}if (b != -1){printf("NONE");}
}

运行结果:

 

更多推荐

C语言 每日一题 PTA 10.25 day4

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

发布评论

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

>www.elefans.com

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