题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排列。请完成这样一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
分析:如输入的二维数组为
1 2 8 9
2 4 9 12
4 7 10 13
6 8 11 15
我们可以从右上角开始的那个数字(设为data[x][y])与输入数字(设为d)进行比较,如果
data[x][y]<d,说明当前数字小于给定数字d,我们只能向比当前数字大的那个方向继续查找,于是我们向下走,即x++;
如果data[x][y]>d,说明当前数字大于给定数字d,我们只能向比当前数字小的那个方向继续查找,于是我们向左走,即y--;
如果data[x][y]==d,则我们就找到了与给定数字相等的那个整数,就可以返回了。
代码如下:
#include <stdio.h>
int DoesHave(int (*data)[4],int m,int n,int d)
{
int ret = 0;
int x=0,y=n-1;
if(data == NULL)
return -1;
while(x<m && y>=0)
{
if(data[x][y] == d)
{
ret = 1;
break;
}
else if(data[x][y] < d)
{
x++;
}
else if(data[x][y] > d)
{
y--;
}
}
return ret;
}
int main()
{
int data[4][4];
int i,j;
int ret;
int d;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
scanf("%d",&data[i][j]);
}
printf("请输入你要判断是否存在的整数:");
scanf("%d",&d);
ret = DoesHave(data,4,4,d);
if(ret)
printf("存在该数%d",d);
else
printf("不存在该数%d",d);
return 0;
}原文地址:http://7876369.blog.51cto.com/7866369/1554644