找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列最小。也可能没有鞍点。
下面是我做这道题时候的代码,如果有不正确的地方,还望大家多多指教。
//马鞍点:矩阵中在行上最大,列上最小的点。 #include <stdio.h> #define ROW 10 #define COLUMN 10 int i,j,m,n; int arr[ROW][COLUMN]; int main(){ void maandian(int arr[ROW][COLUMN]); printf("请输入矩阵的行m,m<=%d\n",ROW); printf("m="); scanf("%d", &m); printf("请输入矩阵的列n,n<=%d\n",COLUMN); printf("n="); scanf("%d", &n); //为矩阵赋初值 printf("请为矩阵的元素输入初始值:\n"); for(i=0; i < m; i++) { for(j=0; j < n; j++) scanf("%d",&arr[i][j]); } //打印该矩阵 printf("您输入的矩阵为:\n"); for(i=0; i<m; i++) { for(j=0; j<n; j++) { printf("%4d",arr[i][j]); } printf("\n"); } //调用求马鞍点的函数 maandian(arr); return 0; } void maandian(int arr[ROW][COLUMN]){ int d,flag,num=0; for(i=0; i<m; i++){ for(j=0; j<n; j++){ flag=1; //注意标记放的位置 //要找行上最大的点,所以如果比行上的任意一个点小就跳过 for(d=0; d<n; d++){ if(arr[i][j]<arr[i][d]) flag=0; } if(flag==0) continue; for(d=0; d<m; d++){ if(arr[i][j]>arr[d][j]) flag=0; } if(flag==0) continue; //如果两个continue都没跳过,说明找到一个马鞍点 num++; printf("第%d个马鞍点位于矩阵的第%d行,%d列,其值为%d\n",num,i+1,j+1,arr[i][j]); } } if(num==0)printf("该矩阵不存在马鞍点"); printf("共有%d个马鞍点\n",num); }