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 = (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 }

 

你可能感兴趣的:(二维数组)