阅读背景:

C语言习题(三)_dream~~~的博客

来源:互联网 

11、

//鞍点:行最大,列最小
//先找到某一行最大的元素,将其列下标保存(最大元素 and 其个数)
//然后从最大值对应的列中找到最小值。如果最大值和最小值相同,即为鞍点
//一行一行的处理
#include<stdio.h>
#define MAXSIZE_ROW 3
#define MAXSIZE_COL 3

//该函数用来找到索引为row的行的最大值元素的列下标及其个数
void getMaxElemColIndex(int matrix[][MAXSIZE_COL],int row,int colIndexArray[],int *length){
    int max=matrix[row][0];
    colIndexArray[0]={0};
    *length=1;

    for(int i=1;i<MAXSIZE_ROW;i++){
        if(matrix[row][i]>max){//若存在更大值,更新列下标数组
            colIndexArray[0]=i;
            *length=1;
            max=matrix[row][i];
        }
        if(matrix[row][i]==max){//有多个相同的最大值
            colIndexArray[*length]=i;
            *length+=1;
        }
    }
}
//该函数用来判断该点是否为鞍点
void isSaddlePoint(int matrix[][MAXSIZE_COL],int colIndex,int maxOfRow){
    int min=matrix[0][colIndex];

    for(int i=1;i<MAXSIZE_ROW;i++){
        if(matrix[i][colIndex]<min)
            min=matrix[i][colIndex];
    }
    if(min==maxOfRow)
        printf("%d\n",maxOfRow);
}
//该函数用于输出第row行所有鞍点
void printSaddlePoint(int matrix[][MAXSIZE_COL],int row,int colIndexArray[],int length){
    int max=matrix[row][colIndexArray[0]];
    for(int i=0;i<length;i++){
        isSaddlePoint(matrix,colIndexArray[i],max);
    }
}

int main(){
    int matrix[3][3]={8,9,10,3,3,3,11,12,13};

    for(int row=0;row<3;row++){
        int colIndexArray[MAXSIZE_COL];
        int length=0;
        getMaxElemColIndex(matrix,row,colIndexArray,&length);
        printSaddlePoint(matrix,row,colIndexArray,length);
    }

    return 0;
}//鞍点:行最大,列最小
//先找到某一行最大的元素,将其列下标保存(最大元素 a



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: