#include<stdio.h>
int main() {
int a[3][3],i,j,hang,lie,max,d; //定义2维数组
for(i=0; i<=2; i++)
for(j=0; j<=2; j++)
scanf("%d",&a[i][j]);//给数组赋值
for(i=0; i<=2; i++) {
max=a[i][0];
hang=i,lie=0;
for(j=0; j<=2; j++) {
if(a[i][j]>max) {
max=a[i][j];
hang=i,lie=j; //确定出每行的最大值
}
d=0;
for(i=0; i<=2; i++)
if(max>a[i][lie])
d=1; //判断此元素是否为该列最小值
if(d==0)
printf("%d为鞍数\n%d为行数\n%d为列数\n",max,hang,lie);//输出 结果
}
}
if(d)
printf("没有鞍数\n");//输出结果
return 0;
}
找出一个二维数组的鞍数,但不知道为什么程序运行结果总是不对
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
关注#include<iostream> using namespace std; /* 求一个n×m数组中的马鞍数,并输出它的位置。 马鞍数:指矩阵n*m中,在行上最小而在列上最大的数 */ #define N 100 int main() { int n, m; // 行数和列数 int a[N][N]; // 二维数组 int value, row, col; // 马鞍数及其所在行号和列号 int flag = 0; // 马鞍数是否存在的标志,0表示不存在,1表示存在 cout << "请分别输入数组的行数和列数:"; cin >> n >> m; for (int i = 0;i < n;i++) for (int j = 0;j < m;j++) cin >> a[i][j]; for (int i = 0;i < n;i++) { int min = a[i][0]; row = i; col = 0; for (int j = 1;j < m;j++) { if (a[i][j] < min) { min = a[i][j]; col = j; } } int max = a[0][col]; for (int k = 0;k < n;k++) { if (a[k][col]>max) { max = a[k][col]; } } if (max == min) { flag = 1; value = max; cout << "马鞍数为:" << value << " "; cout << "在数组中的位置是:" << i + 1 << "行" << col + 1 << "列" << endl; } } if (!flag) cout << "该数组不存在马鞍数!" << endl; system("pause"); return 0; }思路:先找到一行中的最小值,确定了最小值以及所在列号,在从该列找最大值,如果在这一列中找到的最大值与之前找到的最小值相等,就说明这个数为马鞍数,确定所在行数和列数
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报