C语言之每日一题——杨氏矩阵

今天分享的是杨氏矩阵,题目不是特别难,但是是一道比较考验你对杨氏矩阵的理解,要是你不知道杨氏矩阵的话,那你这道题目就无从下手

杨氏矩阵我们可以这样理解,首先矩阵二字证明他是一个长方形型或者正方形的数组,然后从上往下和从左往右的数值是递增的,我们下面看这样的一张图片,大家就可以明白了

在这里插入图片描述
通过这个图,我们可以观察到他的每列和每行都是递增的,这就是杨氏矩阵,那么我们要实现一个代码来查找他的位置,首先我们要想到数组,而且必须是一个二维数组,这样才能存放我们的数据,那么比如我们要找5这个数,他在这个表中的位置是坐标(3,3),那我们就要实现这样的一个代码来完成找到这个数,并且知道这个数的位置所在,若没有这个数,则输出找不到,这个逻辑其实和我们之前写过的三子棋比较相似。

int find_num(int arr[ROW][COl], int row, int col, int k)
{
    
    
	int x = 0;
	int y = col - 1;
	while (x < row && y >= 0)
	{
    
    
		if (arr[x][y] == k)
		{
    
    
			printf("下标为: %d %d\n", x, y);
			return 1;
		}
		else if (arr[x][y] > k)
			y--;
		else if (arr[x][y] < k)
			x++;
	}
	return 0;
}

上面是我们的代码,我们的思路是这样的,我们从右上角开始,如果我们对应的位置比我们要找的数大的时候,那我们向左移,反之向下移,若找到则退出,第一次没找到就继续找,一直循环,直到我们找到这个数为止,若在我们的条件里还没找到,那我们退出循环

下面我们可以用一个main函数来测试我们上面的代码

#include <stdio.h>

int find_num(int arr[3][3], int row, int col, int k)
{
    
    
	int x = 0;
	int y = col - 1;
	while (x < row && y >= 0)
	{
    
    
		if (arr[x][y] == k)
		{
    
    
			printf("下标为: %d %d\n", x, y);
			return 1;
		}
		else if (arr[x][y] > k)
			y--;
		else if (arr[x][y] < k)
			x++;
	}
	return 0;
}

int main()
{
    
    
	int arr[3][3] = {
    
     1, 2, 3, 4, 5, 6, 7, 8, 9 };
	int ret = find_num(arr, 3, 3, 7);
	if (ret == 1)
		printf("找到了\n");
	else
		printf("找不到\n");
	return 0;
}

这里我们数组举例是不重复的数字,如果是上面图案中的也行,不过位置可能不同,如果有相同的数字的话,是先出现在靠右的

今天的题目分享就到这,谢谢大家!!!

猜你喜欢

转载自blog.csdn.net/2301_76895050/article/details/131687919