题目

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

 

问题分析

  

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

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

  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("要测试的数组为:\n");
    for(int i=0;i<M;i++)
    {
            for(int j=0;j<N;j++)
            {
                    printf("%d ",a[i][j]);
            }
            printf("\n");
    }
    printf("请输入要查找的数:");
    while(scanf("%d",&num))
    {
           if(FindNumber(a,M,N,num))
                   printf("该数存在\n");
           else
                   printf("该数不存在\n");
           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
该数不存在
请输入要查找的数:

 

 程序猿必读

posted on 2015-03-15 11:03  龙种人  阅读(182)  评论(0编辑  收藏  举报