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 }

 

posted on 2014-05-21 01:24 adaonline 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/adaonling/p/3740421.html

### 回答1: 以下是用C语言编写的找出二维数组的“鞍点”的程序: ```c #include <stdio.h> #define ROW 3 #define COL 4 int main() { int matrix[ROW][COL] = { {1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12} }; int i, j, k, flag; for (i = 0; i < ROW; i++) { int max = matrix[i][0]; int max_j = 0; for (j = 1; j < COL; j++) { if (matrix[i][j] > max) { max = matrix[i][j]; max_j = j; } } flag = 1; for (k = 0; k < ROW; k++) { if (matrix[k][max_j] < max) { flag = 0; break; } } if (flag) { printf("鞍点为: matrix[%d][%d] = %d\n", i, max_j, max); return 0; } } printf("该二维数组没有鞍点!\n"); return 0; } ``` 程序中,我们定义了一个3行4列的二维数组,然后遍历每一行,找到该行中的最大值和最大值所在的列,再遍历该列,判断该列上的所有元素是否都小于等于该行上的最大值,如果是,则该位置就是一个鞍点,输出其位置和值。如果遍历完整个二维数组没有找到鞍点,则输出“该二维数组没有鞍点!” ### 回答2: 要找出一个二维数组的"鞍点",即该位置上的元素该行最大,在该列上最小,可以使用C语言编写以下程序来实现。 首先,定义一个二维数组,并初始化数组的元素。然后,使用两次循环遍历数组,分别找出每一行的最大值和每一列的最小值。 接下来,再次使用两次循环遍历数组,以确定是否存在鞍点。在遍历过程中,判断当前位置上的元素是否为所在行的最大值和所在列的最小值,如果满足条件,则输出该鞍点位置。 最后,判断是否存在鞍点,如果不存在,则输出相应提示信息。 以下是一个C语言编写的示例程序: ```c #include <stdio.h> #define ROW 3 // 定义二维数组的行数 #define COL 3 // 定义二维数组的列数 int main() { int matrix[ROW][COL] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; // 定义并初始化二维数组 int i, j; // 遍历数组,找出每一行的最大值和每一列的最小值 int maxRow[ROW]; // 存储每一行的最大值 int minCol[COL]; // 存储每一列的最小值 for (i = 0; i < ROW; i++) { maxRow[i] = matrix[i][0]; for (j = 1; j < COL; j++) { if (matrix[i][j] > maxRow[i]) { maxRow[i] = matrix[i][j]; } } } for (j = 0; j < COL; j++) { minCol[j] = matrix[0][j]; for (i = 1; i < ROW; i++) { if (matrix[i][j] < minCol[j]) { minCol[j] = matrix[i][j]; } } } // 遍历数组,判断是否存在鞍点,并输出结果 int found = 0; // 标记是否找到鞍点 for (i = 0; i < ROW; i++) { for (j = 0; j < COL; j++) { if (matrix[i][j] == maxRow[i] && matrix[i][j] == minCol[j]) { printf("鞍点位置为:[%d][%d]\n", i, j); found = 1; } } } if (!found) { printf("该二维数组没有鞍点。\n"); } return 0; } ``` 注意:在实际使用时,可以根据需要修改二维数组的行数和列数以及数组的初始值。 ### 回答3: 以下是用C语言编写的程序,用于找出一个二维数组鞍点: ```c #include <stdio.h> void findSaddlePoint(int matrix[][3], int rows, int cols) { int i, j, k, found; for(i = 0; i < rows; i++) { int maxVal = matrix[i][0]; int maxIndex = 0; for(j = 1; j < cols; j++) { if(matrix[i][j] > maxVal) { maxVal = matrix[i][j]; maxIndex = j; } } found = 1; for(k = 0; k < rows; k++) { if(matrix[k][maxIndex] < maxVal) { found = 0; break; } } if(found) { printf("鞍点位置:[%d][%d],元素值:%d\n", i, maxIndex, maxVal); } } } int main() { int matrix[][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int rows = 3; int cols = 3; findSaddlePoint(matrix, rows, cols); return 0; } ``` 这个程序用到了两个循环。在第一个循环中,我们找到每一行的最大元素以及其索引。在第二个循环中,我们检查该列上是否存在比最大元素小的元素。如果不存在,我们就找到了一个鞍点,然后将其位置元素值打印出来。如果找不到鞍点,程序不会打印任何信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值