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 

運行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM