如何在杨氏矩阵中查询数

一、解题思路:

杨氏矩阵是一个每行每列从左往右增加的一个二维数组,由此,我们可知,在每行的最右端的数字是这行最大的,每列最前的那个数是这列最小的,可参看下图

以上就是小陈分析的杨氏矩阵解题思路。

二、代码展示

1.主函数写法:

int main()
{
	int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
	int k = 0;
	scanf("%d", &k);
	int i = 0;//行
	int j = 2;//列
	int flag = 0;
	while (i <= 2 && j >= 0)
	{
		if (arr[i][j] < k)
		{
			i++;
		}
		else if (arr[i][j] > k)
		{
			j--;
		}
		else if (arr[i][j] == k)
		{
			flag = 1;
			printf("找到了\n");
			break;
		}
	}
	if (flag == 0)
	{
		printf("找不到\n");
	}
	return 0;
}

2. 分装函数的写法:

void young_table_search(int arr[3][3], int src,int *px,int *py)
{
	//在每一行的最左边开始查找,看最左边的数
	//是否是比查找的数小,小就舍弃那一行,跳到第二行的左边开始查找
	//当查找到的最左边的数大于查找的数,就在这一排中查找,变动列
	int i= 0;
	int j = *py-1;
	while (i<=*px-1&&j>=0)
	{
		if (arr[i][j] < src)
		{
			i++;
		 }
		else if (arr[i][j] > src)
		{
			j--;
		}
		else if(arr[i][j] == src)
		{
			*px = i;
			*py = j;
			return;
			
		}
	}
	*px = -1;
	*py = -1;
}
int main()
{
	int arr[3][3] = { 1,2,3,4,5,6,7,8,9};
	int k = 0;
	scanf("%d", &k);
	int x = 3;
	int y = 3;
	young_table_search(arr, k,&x,&y);
	if (arr[x][y] == k)
	{
		printf("找到了,下标为:%d %d\n", x, y);
	}
	if (x == -1 && y == -1)
	{
		printf("找不到\n");
	}
	return 0;
}

首先,我们在开始时写一个main函数,创建一个二维数组,在创建一个K,这里的K代表的是我们需要查找的数字, 还是使用我们的scanf函数录入我们需要查找的数字。接下来,创建我们的杨氏矩阵查找函数,把我们所需要的参数传入到我们的函数中,如果后面需要让此函数返回查找数字在矩阵中所在的行与列,我们不妨可以在主函数内定义俩个变量,创建x与Y两个变量,再把两个变量的地址传入函数中(传址和传值的区别,传值是不能改变我们变量在主函数的值,但是传址可以,传址,相当于我们把变量的地址传过去,在变量所给的地址中去寻找变量的初始值去改变,传值只是仅仅重新在函数中开辟一个新的空间来存放,而后期的改变也是在这个空间中改变,但是出了这个函数,这个空间就主动销毁了,主函数中的变量还是没有被改变)这样就能得到查找函数的列和行了(return不能同时返回俩个值,因此我们这里采用了这种写法,来得到我们所需要的坐标

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dongliner~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值