zoukankan      html  css  js  c++  java
  • 二维数组中的查找

    题目

      在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    问题分析

      

     应当从具体问题入手,通过分析简单具体的例子,发现普遍的规律。

      现在假定,我们要从二维数组

      1  7  14  21

      3  8  15  22

      5  9  16  23

      7  17 23 24

      中检索是否存在数字7。

      按照从右上方,列优先的顺序检索该数组。

      1. 在检索17的时候,因为21大于17,故可剔除第四列。

      2. 在检索14的时候,因为14小于17,故可剔除第一行,相当于更新行号和列号后重新执行而已。则剩下

                 3  8  15  

                 5  9  16  

                 7  17 23

         3. 在检索15的时候,因为15小于17,故可剔除第一行,只剩下

                   5  9  16  

                 7  17 23

         4. 在检索16的时候,因为16小于17,故可剔除第一行,只剩下

                   7  17 23

      5. 在检索到23的时候,因为23大于17,故可剔除第三列,只剩下

                     7   17

         6. 检索到17,返回。

    代码实现如下:

    #include <stdio.h>
    #define M 4
    #define N 4
    int FindNumber(int array[M][N],int rows,int columns,int number)
    {
        if(array!=NULL && rows>0 && columns>0)
            {
                int col=columns-1,row=0;
                while(col>=0 && row<rows)
                {
                    if(array[row][col]>number)
                       {
                          col--;
                          continue;
                       }
                    else if(array[row][col]<number)
                    {
                          row++;
                          continue;
                    }
                    else
                            return 1;
                }
                return 0;
    
            }
        else
                return 0;
    }
    
    
    int main(void)
    {
        int a[M][N]={
          {1,7,14,21},{3,8,15,22},{5,9,16,23},{7,17,23,24}
        };
        int num;
        printf("要测试的数组为:
    ");
        for(int i=0;i<M;i++)
        {
                for(int j=0;j<N;j++)
                {
                        printf("%d ",a[i][j]);
                }
                printf("
    ");
        }
        printf("请输入要查找的数:");
        while(scanf("%d",&num))
        {
               if(FindNumber(a,M,N,num))
                       printf("该数存在
    ");
               else
                       printf("该数不存在
    ");
               printf("请输入要查找的数:");
        }
    
        return 0;
    }

    结果如下:

    $ ./MyFindNumberInTwoArrays.exe
    要测试的数组为:
    1 7 14 21
    3 8 15 22
    5 9 16 23
    7 17 23 24
    请输入要查找的数:17
    该数存在
    请输入要查找的数:23
    该数存在
    请输入要查找的数:22
    该数存在
    请输入要查找的数:10
    该数不存在
    请输入要查找的数:6
    该数不存在
    请输入要查找的数:

     程序猿必读

  • 相关阅读:
    400多个开源项目以及43个优秀的Swift开源项目-Swift编程语言资料大合集
    iOS开发-OC分支结构
    iOS开发-OC数据类型
    const volatile同时限定一个类型int a = 10
    详细解说Tomcat 设置虚拟路径的几种方法及为什么设置虚拟路径
    MySQL5.7数据库的基本操作命令
    CentOS7下搭建LAMP+FreeRadius+Daloradius Web管理
    Python安装第三方库的两种方式
    如何更换CentOS6的yum源
    CentOS6.5下搭建LAMP+FreeRadius+Daloradius Web管理和TP-LINK路由器、H3C交换机连接,实现,上网认证和记账功能
  • 原文地址:https://www.cnblogs.com/longzhongren/p/4338946.html
Copyright © 2011-2022 走看看