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

简介: 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;
}
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12
• 13
• 14
• 15
• 16
• 17
• 18

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

下面我们可以用一个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;
}

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

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


相关文章
|
4天前
|
算法 C语言
C语言:杨氏矩阵、杨氏三角、单身狗1与单身狗2
C语言:杨氏矩阵、杨氏三角、单身狗1与单身狗2
23 0
|
4天前
|
C语言
C语言--杨氏矩阵
C语言--杨氏矩阵
13 0
|
10月前
|
C语言
C语言:杨氏矩阵中查找某数(时间复杂度小于O(N))
题目: 有一个数字矩阵(二维数组), 矩阵的每行从左到右是递增的, 矩阵从上到下是递增的, 请编写程序在这样的矩阵中查找某个数字是否存在, 要求:时间复杂度小于O(N)。
232 1
|
4天前
|
C语言
C语言第四十六弹---最快方法找到杨氏矩阵中的数下标
C语言第四十六弹---最快方法找到杨氏矩阵中的数下标
|
6月前
|
存储 算法 C语言
【C语言刷题】猜名次、猜凶手、杨辉三角、杨氏矩阵、字符串左旋、判断是否为左旋子串
【C语言刷题】猜名次、猜凶手、杨辉三角、杨氏矩阵、字符串左旋、判断是否为左旋子串
53 0
|
9月前
|
算法 C语言
C语言杨氏矩阵
C语言杨氏矩阵
43 0
|
9月前
|
存储 C语言
【C语言练习】杨氏矩阵、杨辉三角
【C语言练习】杨氏矩阵、杨辉三角
49 0
|
10月前
|
算法 C语言
【C语言每日一题】杨氏矩阵(源码以及改进源码)
【C语言每日一题】杨氏矩阵(源码以及改进源码)
51 0
|
算法 C语言 C++
C语言每日一题】——杨氏矩阵
杨氏矩阵🙌 题目简述: 有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。 要求: 时间复杂度小于O(N);
95 0
c语言 - 杨氏矩阵,查找某个数字(思路清晰,代码简洁)(适合刚入坑)
c语言 - 杨氏矩阵,查找某个数字(思路清晰,代码简洁)(适合刚入坑)
c语言 - 杨氏矩阵,查找某个数字(思路清晰,代码简洁)(适合刚入坑)