• 二维数组的鞍点问题


    找出一个二维数组中的“鞍点”,即该位置上的元素在该行中 最大,在该列中最小(也可能没有“鞍点”),打印有关信息。(提示:注意特 殊情况:没鞍点或多个鞍点) 

    方法一:

    void test3_1()
    {
        int testArray[3][4]={0};
        for (int i=0; i<3; i++) {
            for (int j=0; j<4; j++) {
                testArray[i][j]=arc4random()%20+30;
            }
        }int maxValue=0;
        int flag=0;
        for (int i=0; i<3; i++) {
            flag=0;
            for (int j=0; j<4; j++) {
                if (maxValue<testArray[i][j]) {
                    maxValue=testArray[i][j];
                }
            }
            for (int k=0; k<4; k++)
            {
                if (testArray[i][k]==maxValue)
                {
                    for (int l=0; l<3; l++)
                    {
                        if (testArray[i][k]>testArray[l][k])
                        {
                            flag=1;
                            break;
                        }
                    }
                    if (flag==0) {
                        printf("x=%d,y=%d
    ",i,k);
                    }
                }
            }
        }
        for (int i=0; i<3; i++) {
            for (int j=0; j<4; j++) {
                printf("%d ",testArray[i][j]);
            }
            printf("
    ");
        }
    }

    方法二:

    void test3_2()
    {
        int testArray[3][4]={0};
        for (int i=0; i<3; i++) {
            for (int j=0; j<4; j++) {
                testArray[i][j]=arc4random()%20+30;
            }
        }
        for (int i=0; i<3; i++) {
            for (int j=0; j<4; j++) {
                bool isLineMaxValue=YES;
                for (int k=0; k<4; k++)
                {
                    if (testArray[i][j]<testArray[i][k]) {
                        isLineMaxValue=NO;
                        break;
                    }
                }
                if (isLineMaxValue==NO) {
                    continue;
                }
                BOOL isColumnMinValue=YES;
                for (int l=0; l<3; l++) {
                    if (testArray[i][j]>testArray[l][j]) {
                        isColumnMinValue=NO;
                    }
                }
                if (isColumnMinValue==NO) {
                    continue;
                }
                printf("testArray[%d][%d]=%d是鞍点
    ",i,j,testArray[i][j]);
            }
        }
        for (int i=0; i<3; i++) {
            for (int j=0; j<4; j++) {
                printf("%d ",testArray[i][j]);
            }
            printf("
    ");
        }
    }

    说明:方法一和方法二都可以正确打印出鞍点,唯一不同的地方就是判断元素是否是当前行的最大值,第一种方法比第二种方法的效率要高,第二种方法的话,每一个元素都要跟改行中的其他所有元素比较,而第一种只需要在求出最大值后跟最大值进行比较即可,第二种的循环次数大于第一种循环,所以第一种的效率较高。

  • 相关阅读:
    c# 生成、读取xml
    http长连接与短连接
    p.net 子页面刷新父页面,页面自动刷新方法汇总
    遍历页面上所有控件
    从数据库导入到Excel表格(同时传四个表的数据到一个Excel中)
    .net海量数据分页通用存储过程
    SQL大数据量分页存储过程效率测试
    给一个接口传递参数,并接收返回的参数
    在asp.net中长内容自动分页的实现.NET教程
    GridView72般技巧
  • 原文地址:https://www.cnblogs.com/haili/p/3930966.html
Copyright © 2020-2023  润新知