题目:
一个二维数组,每一行都按照从左到右递增,
每一列都按照从上到下递增,
查找一个数是否存在于二维数组中
思路:
代码如下:
#include<stdio.h>
//bool Find(int (*p)[5]){}
//以前习惯于将二维数组的传递这样写,可是这样并不好,因为[]里无法给变量
//学会善于利用一维数组解决 rows:行 columns:列 number:要查找的数
bool Find(int *arr,int rows,int columns,int number)
{
if(*arr == NULL||rows<1||columns<1)
{
return false;
}
int i = 0;
while(i<columns && rows >= 0)
{
int tmp = arr[(rows-2)*(columns-1)+i];
if(tmp == number)
{
return true;
}
else if(tmp < number)
{
i++;
}
else
{
rows -= 1;
}
}
return false;
}
int main()
{
int arr[5]={};
int brr[25]={1,2,8,9,2,4,9,12,4,7,10,13,6,8,11,15};
printf("%d\n",Find(arr,0,0,0));
printf("%d\n",Find(brr,5,5,8));
printf("%d\n",Find(brr,5,6,8));
printf("%d\n",Find(arr,5,5,14));
}
总结:善于寻找规律,发现规律,利用规律。