今天分享的是杨氏矩阵,题目不是特别难,但是是一道比较考验你对杨氏矩阵的理解,要是你不知道杨氏矩阵的话,那你这道题目就无从下手
杨氏矩阵我们可以这样理解,首先矩阵二字证明他是一个长方形型或者正方形的数组,然后从上往下和从左往右的数值是递增的,我们下面看这样的一张图片,大家就可以明白了
通过这个图,我们可以观察到他的每列和每行都是递增的,这就是杨氏矩阵,那么我们要实现一个代码来查找他的位置,首先我们要想到数组,而且必须是一个二维数组,这样才能存放我们的数据,那么比如我们要找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;
}
这里我们数组举例是不重复的数字,如果是上面图案中的也行,不过位置可能不同,如果有相同的数字的话,是先出现在靠右的
今天的题目分享就到这,谢谢大家!!!