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 }