码迷,mamicode.com
首页 > 其他好文 > 详细

二维数组中的查找

时间:2014-09-18 16:55:14      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:c语言面试题 二维数组的查找

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

分析:如输入的二维数组为

                            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;
}


二维数组中的查找

标签:c语言面试题 二维数组的查找

原文地址:http://7876369.blog.51cto.com/7866369/1554644

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!