首页 > 代码库 > c语言题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点

c语言题目:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点

 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 = http://www.mamicode.com/(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 }