声明一个3行4列的二维数组,求出数组中鞍点及其所在的行,列坐标(鞍点:即该位置上的元素在该行中最大,在该列中最小(也可能没有鞍点))

int a[3][4] = {0};

        //计数器

        int count = 0;

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

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

                a[i][j] = arc4random() % (30 - 10 + 1) + 10;

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

            }

            printf("\n");

        }

        //判断鞍点操作如下

        //因为我们不知道数组中哪个数是鞍点,有可能每个都是,所以只有将每个元素都拿出来进行判断

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

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

                //假设当前取出的元素就是该行最大的元素

                int max = a[i][j];

                //记录是否是该行最大值

                BOOL isMax = YES;

                for (int column = 0; column < 4; column++) {

                    //如果比较过程中有一个数比假设的数大,说明该数不是该行的最大值,如果不是最大值中断循环

                    if (a[i][column] > max) {

                        isMax = NO;

                        //如果不是最大值中断循环

                        break;

                    }

                }

                if (isMax == NO) {

                    continue;

                }

                //假设该数是该列的最小值

                //假设代码能走到这一行,说明该数已经是这一行的最大值,只需判断该数是否是该列的最小值

                int min = a[i][j];

                //记录该数是否是该列的最小值

                BOOL isMin = YES;

                for (int row = 0; row < 3; row++) {

                    //如果比较中发现比较的某个数比我们假设的最小值还要小,假设不成立

                    if (a[row][j] < min) {

                        //说明该数不是该列的最小值

                        isMin = NO;

                    }

                }

                if (isMin == NO) {

                    continue;

                }

                count++;

                //代码能走到这一行,说明是该数就是鞍点

                printf("%d,%d列是鞍点\n", i + 1, j + 1);

                }

            }

        if (count == 0) {

            printf("没有鞍点");

        }


你可能感兴趣的:(C语言)