/*line 4 list 3 经本人试验,取随意行列数,这个式子都能运行成功,不过不好赋值,但可以换
成赋值随机数,但是那样就比较难出现鞍点,我随即了60次,只出现了2次*/
//int _array[line][list] = {10,8,10,11,13,7,12,15,5,15,17,18};// 举例子,10是鞍点
int _array[line][list] = {0};
for (int i = 0; i < line; i++) {
for (int j = 0; j < list; j++) {
_array[i][j] = arc4random()%100000;
printf(" _array[%d][%d]=%2d ",i,j,_array[i][j]);
}
printf("\n");
}
printf("\n@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
int _maxline = _array[0][0];
int _minlist = _array[0][0];
int _maxi = 0, _maxj = 0,_mini = 0,_minj = 0;
int j = 0, k = 0;
int flag = line;
// 利用的思想:3个for循环,最外面的循环控制一共要循环的次数(也就是有多少行就循环判断多少次),然后第二个for循环找出每一行中最大的元素是哪一列,这样也就得到了这个元素的列下标,再用第三个for循环和得到的列下标,来判断这个元素是否是这一列的最小数
for (int i = 0; i < line; i++) {
for ( j = 0; j < list; j++) {
if (_maxline <= _array[i][j]) {
if (_maxline == _array[i][j+1]) {
printf("\t\t这个二维数组不存在鞍点");
} else {
_maxline = _array[i][j];
_maxi = i;
_maxj = j;
}
}
}
for ( k = 0; k < line; k++) {
if (_minlist > _array[k][_maxj]) {
_minlist = _array[k][_maxj];
_mini = k;
_minj = _maxj;
}
}
if (_maxi == _mini && _maxj == _minj) {
printf("\t\t_array[%d][%d]=%d是鞍点",_mini,_minj,_array[_mini][_minj]);
flag--;
}
}
if (flag == line) {
printf("\t\t这个二维数组不存在鞍点");
}
找出一个二维数组中的“鞍点”,即该位置上的元素在该行中最大,在该列中最小(也可能没鞍点),打印出有关信息
最新推荐文章于 2022-02-23 18:03:54 发布