查找一个数阵中的鞍点

要求:鞍点为同一行的最大值和同一列的最小值

2:分析,由于鞍点的特性,假如这个数阵每行每列的数字均不相等,则只可能存在一个鞍点,这是由于若数互不相等,若存在一个鞍点,则其他行的最大值肯定大于等于这个鞍点所在行的最大值,就会大于鞍点行所在行的其他列的数字,就不可能为最小列,因此只可能存在一个鞍点

所以若存在多个鞍点则同一行或同一列存在相等的数字

1 4 1 4

5 6 7 8

9 10 11 12(有两个鞍点)

1 4 1 4

1 4 1 4

5 6 5 6(有四个鞍点)

int main()//鞍点查找,鞍点:行最大,列最小
{
  int row,col;
  scanf("%d %d",&row,&col);
   int arr[row][col]; int maxnum[row];int minnum[col];
   int maxcol=0;int minrow=0;
   int i=0;int j=0;int k=0;
  for(int i=0;i<row;i++)
  {
    for(int j=0;j<col;j++)
    {
        scanf("%d",&arr[i][j]);
    }
  }//赋值
    for(int i=0;i<row;i++)
  {
    int max=arr[i][0];
        for(int j=0;j<col;j++)
     {
         if(arr[i][j]>=max){
         maxnum[k]=arr[i][j];
        }//得到每一行的最大值
      }
      k++;
  }
  k=0;//重置k的值
   for(int i=0;i<col;i++)
 {
   int min=arr[0][i];
   for(int j=0;j<row;j++)
   {
    if(arr[j][i]<=min){
      minnum[k]=arr[j][i];
    }
   }
   k++;
 }//得到每一列的最小值
 for(int i=0;i<row;i++)
 {
  for(int j=0;j<col;j++)
  {
    if(arr[i][j]==maxnum[i]&&arr[i][j]==minnum[j]){//maxnum[i]表示第i行的最大,minnum[j]表示第j列的最小
      printf("鞍点是(%d,%d)",i+1,j+1);//i+1,j+1是为了方便理解含义写成这个样子,便于检验正误
      printf("\n");
    }
  }
 }
  return 0;
}

1,注意第二次获得列最小时要把i,j的值倒过来,或者直接用英文缩写声明变量,防止搞错

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值