C语言之多维数组简单题目练习

本文通过一个6行8列的二维数组实例,展示了如何寻找数组中的鞍点。鞍点是指该位置的元素既是所在行的最大值,又是所在列的最小值。首先,程序生成了一个随机数组,然后分别找出每行的最大值和每列的最小值。接着,通过比较找到鞍点的位置,如果不存在鞍点,则给出相应提示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

求一个二维数组的鞍点问题(以6行8列为例)奋斗:

思路一:找出每一行的最大值位置,每一列的最小值位置,然后检查是否有交叉。

程序实现如下:

   int array[6][8]={0};

   int max[6]={0},min[8]={0};

   int row[6]={0},colum[8]={0};

       for (int i=0; i<6; i++) {

           for (int j=0;j<8; j++) {

                array[i][j]=arc4random()%51+40;

               printf("%d ",array[i][j]);

            }

           printf("\n");

        }

    //找出每行中的最大值列下标组成数组row[6]

    //找出每列中得最小值行下标组成数组colum[8]

    printf("\n\n\n");

   for (int i=0; i<6; i++) {

        int maxRow=0;

       for (int j=0; j<8; j++) {

            maxRow=maxRow>array[i][j]?maxRow:array[i][j];

        }

        max[i]=maxRow;

       printf("%d ",max[i]);

    }

    printf("\n\n\n");

    

    //找出每一行最大值元素的下标

    printf("行最大值元素位置为:");

   for (int i=0; i<6; i++) {

       for (int j=0; j<8; j++) {

           if (array[i][j]==max[i]) {

                row[i]=j;//意思是i行的最大值在第j

               printf("%d ",j);

            }

        }

    }

   printf("\n");

    //找出每一列最小值元素数组

   for (int i=0; i<8; i++) {

       int minColum=100;

       for (int j=0;j<6; j++) {

            minColum=minColum<array[j][i]?minColum:array[j][i];

        }

        min[i]=minColum;

       printf("%d ",min[i]);

    }

    printf("\n");

  //找出每一列最小值元素数组下标

    printf("列最小值元素位置为:");

   for (int j=0; j<8; j++) {

       for (int i=0; i<6; i++) {

           if (min[j]==array[i][j]) {

                colum[j]=i;//意思是j列的最小值在第i

               printf("%d ",i);

            }

        }

    }

   int sum=0;

   for (int j=0; j<8; j++)

    {

       if (row[colum[j]]==j) {

           printf("\n鞍点位置arr[%d][%d]",colum[j],j);

            sum++;

        }

    }

   if (sum==0)

    {

       printf("\n不存在鞍点");

    }

思路二 

思路一:找出每一行的最大值以及最大值位置,然后用这个最大值去跟该列中每个元素进行比较。

程序实现(省略)难过


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值