1 //題目:找出一個二維數組的“鞍點”,即該位置上的元素在該行上最大,在該列上最小。也可能沒有鞍點。 2 // 3 #include "stdio.h" 4 #include <stdlib.h> 5 int main() 6 { 7 int i,j,k,hang=1,lie=1; 8 printf("輸入行"); 9 scanf("%d",&hang); 10 printf("輸入列"); 11 scanf("%d",&lie); 12 printf("請輸入該矩陣的元素,行內左至右順序輸入,行間上至下順序輸入,按回車完成一個元素的輸入:\n"); 13 int zong=hang*lie; 14 15 int *a; 16 a=(int *) malloc (zong * sizeof(int)); 17 printf("請輸入 %d 個元素: ", zong); 18 for (i = 0; i < zong; i++) 19 scanf("%d", &a[i]); 20 printf("\b \n"); 21 22 int **data; 23 24 25 data = (int **) malloc (hang * sizeof(int *)); 26 for(int j=0;j<hang;j++) 27 { 28 data[j] = (int *)malloc(lie*sizeof(int)); 29 } 30 for (int k=0,i=0;k<hang;k++) 31 { 32 33 for (int j=0;j<lie;j++) 34 { 35 36 data[k][j]=a[i]; 37 i++; 38 39 40 } 41 } 42 free(a); 43 44 int *rmax; 45 rmax=(int *) malloc (hang * sizeof(int)); 46 47 48 for(k=0;k<hang;k++) 49 { 50 rmax[k]=0; 51 for(j=0;j<lie;j++) 52 { 53 54 if(data[k][j]>=rmax[k]) 55 { 56 rmax[k]=data[k][j]; 57 58 } 59 } 60 61 } 62 int*cmin; 63 cmin=(int *) malloc (lie * sizeof(int)); 64 65 for(j=0;j<lie;j++) 66 { 67 cmin[j]=0; 68 for(k=0;k<hang;k++) 69 { 70 if(k==0) 71 cmin[j]=data[k][j]; 72 if(data[k][j]<=cmin[j]) 73 { 74 cmin[j]=data[k][j]; 75 } 76 } 77 78 } 79 80 for(j=0;j<hang;j++) 81 for(k=0;k<lie;k++) 82 { 83 if(rmax[j]==cmin[k]) 84 printf("data[%d][%d]=%d\n",j+1,k+1,rmax[j]); 85 }//這裡要用到循環比較,下面這樣不行 86 87 // if(rmax[k]==cmin[j]) 88 // printf("data[%d][%d]=%d\n",k+1,j+1,rmax[k]); 89 // else 90 // printf("It is not exist!\n"); 91 92 for (i=0;i<hang;i++) 93 { 94 free(data[i]); 95 } 96 free(data); 97 system("pause"); 98 }