其他分享
首页 > 其他分享> > C语言 | 找出一个二维数组中的鞍点

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

作者:互联网

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

分析:一个有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 

运行结果:

 

标签:一个二维,int,元素,列上,C语言,二维,数组,鞍点
来源: https://www.cnblogs.com/lesly/p/15085129.html