二維數組的鞍點,即該位置上的元素在該行上最大,在該列上最小。也可能沒有鞍點。
分析:一個有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
運行結果: