题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
定义一个这样的数组:
比如查找数字7,我们先用右上角的数字进行比较,7<10,说明7在10这列的左边,因此剔除掉最后一列
然后再从右上角开始比较,7<9,再剔除最后一列
再用2<7,因此7一定在2的下面或者右边。又因为2后面的两列已被剔除,只能向下找。因此范围只剩下:
以此推类。
代码:
#include<stdio.h>
bool Find(int *arr, int ROW, int COL, int data)
{
int row = 0;//定义行为0
int col = COL - 1;//列为3
if ((arr != NULL) && (ROW>0&&COL>0))//判断是否为空数组
{
while (row<ROW&&col >= 0)//直到排除完
{
if (arr[row*col + col] == data)//右上角为查找的数字
{
return true;
}
else if (arr[col*row + col]>data)//右上角大于data,要剔除最后一列
{
--col;
}
else{
row++;//右上角小于data,向下移动一行
}
}
}
return false;bool
}
int main()
{
int arr[] = { 1,2,9,10,3,4,11,12,5,7,13,14,6,9,15,16};
int data = 0;
int ROW = 3;
int COL = 3;
printf("请输入你要查找的数字:");
scanf_s("&data");
int ret=Find(arr, ROW, COL, data);
if (ret == 1)
{
printf("找到了\n");
}
else if (ret==0)
{
printf("找不到\n");
}
system("pause");
return 0;
}
今天,冲鸭