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 }