首页 > 编程语言 > 详细

C语言 | 找出一个二维数组中的鞍点

时间:2021-07-31 22:21:56      阅读:32      评论:0      收藏:0      [点我收藏+]

二维数组的鞍点,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。

分析:一个有N行M列的二维数组,会有N个行的最大元素,M个列的最小元素,当行的最大值和列的最小值相等且是同一个元素时,这个元素就是该二维数组的鞍点。

 1 /*
 2 找出一个二维数组中的鞍点,
 3 即该位置上的元素在该行上最大,
 4 在该列上最小。也可能没有鞍点。
 5 代码中可以通过修改宏定义M N的值修改二维数组的行列数。 
 6 */
 7 #include<stdio.h>
 8 #define N 3
 9 #define M 3
10 
11 int main()
12 {
13     int arr[N][M];
14     int temp1[N],temp2[M];
15     int i,j;
16     int temp=0;//定义一个标记,初始化为假(0),表示没有鞍点
17 
18     printf("请为二维数组array[%d][%d]赋值:\n",N,M);
19     for(i=0;i<N;i++)
20     {
21         for(j=0;j<M;j++)
22         {
23             scanf("%d",&arr[i][j]);
24         }
25     }
26 
27     //判断每一行的最大值
28     for(i=0;i<N;i++)
29     {
30         temp1[i]=arr[i][0];//用i行第1个值初始化temp1;
31         for(j=0;j<M;j++)
32         {
33             if(temp1[i]<arr[i][j])
34                 temp1[i]=arr[i][j];
35         }
36     }
37 
38     //判断每一列的最小值
39     for(i=0;i<M;i++)
40     {
41         temp2[i]=arr[0][i];//用i列第1个值初始化temp2;
42         for(j=0;j<N;j++)
43         {
44             if(temp2[i]>arr[j][i])
45                 temp2[i]=arr[j][i];
46         }
47     }
48 
49     //判断是否有鞍点
50     for(i=0;i<N;i++)
51     {
52         for(j=0;j<M;j++)
53         {
54             //当行的最大值和列的最小值相等且是同一个元素时,这个元素是鞍点
55             if(arr[i][j]==temp1[i] && arr[i][j]==temp2[j])
56             {
57                 printf("该二维数组的鞍点为%d\n",arr[i][j]);
58                 temp=1;//标记改为真(1),表示有鞍点
59             }
60         }
61     }
62 
63     if(temp==0)//如果标记为假(0)
64         printf("该二维数组没有鞍点\n");
65 
66     return 0;
67 }

 

 

测试数据:1 4 2 1 3 2 3 5 1 

运行结果:

技术分享图片

 

C语言 | 找出一个二维数组中的鞍点

原文:https://www.cnblogs.com/lesly/p/15085129.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!