#include <stdio.h>
void setupmatrix(int m, int n,int M[m][n]){
int i,j;
for(i=0;i<m;i++){
for(j=0;j<n;j++){
scanf("%d",&M[i][j]);
}
}
}
void printmatrix(int m,int n,int M[m][n]){
int i,j;
for(i=0;i<m;i++){
for(j=0;j<n;j++){
printf("%d ",M[i][j]);
}
printf("\n");
}
}
int saddlepoint(int m,int n,int M[m][n]){
int i,j,k;
int row,col;
for(i=0;i<m;i++){
int min = M[i][0];
for(j=0;j<n;j++){
if(min>M[i][j]){
min = M[i][j];
col = j;
}
}
int max = M[0][col];
for(k=0;k<m;k++){
if(max<M[k][col]){
max = M[k][col];
row = k;
}
}
if(max == min){
printf("the location is (%d,%d)\n",row,col);
return max;
}
}
return 0;
}
int main(){
int m,n,num;
printf("enetr m and n:");
scanf("%d %d",&m,&n);
int M[m][n];
printf("enter a matrix:\n");
setupmatrix(m,n,M);
saddlepoint(m,n,M);
printf("the saddle point is %d\n",saddlepoint(m,n,M));
//printmatrix(m,n,M);
return 0;
}
题目中的定义和鞍点的数学定义稍有不同,按照数学定义,应该是在矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点。
代码稍作改动则为
#include <stdio.h>
void setupmatrix(int m, int n,int M[m][n]){
int i,j;
for(i=0;i<m;i++){
for(j=0;j<n;j++){
scanf("%d",&M[i][j]);
}
}
}
void printmatrix(int m,int n,int M[m][n]){
int i,j;
for(i=0;i<m;i++){
for(j=0;j<n;j++){
printf("%d ",M[i][j]);
}
printf("\n");
}
}
int saddlepoint(int m,int n,int M[m][n]){
int i,j,k;
int row,col;
for(i=0;i<m;i++){
int max = M[i][0];
for(j=0;j<n;j++){
if(max<M[i][j]){
max = M[i][j];
col = j;
}
}
int min = M[0][col];
for(k=0;k<m;k++){
if(min>M[k][col]){
min = M[k][col];
row = k;
}
}
if(max == min){
printf("the location is (%d,%d)\n",row,col);
return max;
}
}
return 0;
}
int main(){
int m,n,num;
printf("enetr m and n:");
scanf("%d %d",&m,&n);
int M[m][n];
printf("enter a matrix:\n");
setupmatrix(m,n,M);
saddlepoint(m,n,M);
printf("the saddle point is %d\n",saddlepoint(m,n,M));
//printmatrix(m,n,M);
return 0;
}
网友评论