找出一个二维数组中的“鞍点”,即该位置上的元素在该行中最大,在该列中最小(也可能没鞍点),打印出有关信息

    /*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这个二维数组不存在鞍点");
    }

你可能感兴趣的:(C)