C语言 | 找出一个二维数组中的鞍点
作者:互联网
二维数组的鞍点,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。
分析:一个有N行M列的二维数组,会有N个行的最大元素,M个列的最小元素,当行的最大值和列的最小值相等且是同一个元素时,这个元素就是该二维数组的鞍点。
1 /* 2 找出一个二维数组中的鞍点, 3 即该位置上的元素在该行上最大, 4 在该列上最小。也可能没有鞍点。 5 代码中可以通过修改宏定义M N的值修改二维数组的行列数。 6 */ 7 #include<stdio.h> 8 #define N 3 9 #define M 3 10 11 int main() 12 { 13 int arr[N][M]; 14 int temp1[N],temp2[M]; 15 int i,j; 16 int temp=0;//定义一个标记,初始化为假(0),表示没有鞍点 17 18 printf("请为二维数组array[%d][%d]赋值:\n",N,M); 19 for(i=0;i<N;i++) 20 { 21 for(j=0;j<M;j++) 22 { 23 scanf("%d",&arr[i][j]); 24 } 25 } 26 27 //判断每一行的最大值 28 for(i=0;i<N;i++) 29 { 30 temp1[i]=arr[i][0];//用i行第1个值初始化temp1; 31 for(j=0;j<M;j++) 32 { 33 if(temp1[i]<arr[i][j]) 34 temp1[i]=arr[i][j]; 35 } 36 } 37 38 //判断每一列的最小值 39 for(i=0;i<M;i++) 40 { 41 temp2[i]=arr[0][i];//用i列第1个值初始化temp2; 42 for(j=0;j<N;j++) 43 { 44 if(temp2[i]>arr[j][i]) 45 temp2[i]=arr[j][i]; 46 } 47 } 48 49 //判断是否有鞍点 50 for(i=0;i<N;i++) 51 { 52 for(j=0;j<M;j++) 53 { 54 //当行的最大值和列的最小值相等且是同一个元素时,这个元素是鞍点 55 if(arr[i][j]==temp1[i] && arr[i][j]==temp2[j]) 56 { 57 printf("该二维数组的鞍点为%d\n",arr[i][j]); 58 temp=1;//标记改为真(1),表示有鞍点 59 } 60 } 61 } 62 63 if(temp==0)//如果标记为假(0) 64 printf("该二维数组没有鞍点\n"); 65 66 return 0; 67 }
测试数据:1 4 2 1 3 2 3 5 1
运行结果:
标签:一个二维,int,元素,列上,C语言,二维,数组,鞍点 来源: https://www.cnblogs.com/lesly/p/15085129.html