C语言--杨氏矩阵

简介: C语言--杨氏矩阵

这道题目就是判断一个数字是否在杨氏矩阵里面

1.

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

(1)因为是有复杂度的要求,我们不能直接进行遍历操作,而是提高程序的效率;

(2)我们每一次都从最右上角的数字开始和我们要找的数字进行比较,如果这个数字比要找的数

字大,根据定义,那么就可以社区这一列,就执行减减操作,如果这个数字比要找的数字小,那么

这一行的数据就可以省略了,就执行加加操作,进入到下一行;

(3)循环的条件就是不能超过第三行,而且不能小于第1列,这个就是范围;

2.

void yangshijuzhen(int arr[3][3],int k,int r,int c)
{
  int x = 0;
  int y = c - 1;
  int flag = 0;
  while (x <= 2 && y >= 0)
  {
    if (arr[x][y] > k)
    {
      y--;
    }
    else if (arr[x][y] < k)
    {
      x++;
    }
    else
    {
      flag = 1;
      printf("找到了,是%d,%d\n", x, y);
      break;
    }
  }
  if (flag == 0)
  {
    printf("找不到\n");
  }
}
int main()
{
  int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
  int k = 0;
  scanf("%d", &k);
  yangshijuzhen(arr, k, 3, 3);
  return 0;
}

这种做法就是把判断的部分封装成了一个函数,要注意传参和i,j的变化,一个是从0开始的,一个

是从1开始的,沿著以之间的细微变化;

3.

void yangshijuzhen(int arr[3][3],int k,int *px,int *py)
{
  int x = 0;
  int y = *py - 1;
  int flag = 0;
  while (x <= *px-1 && y >= 0)
  {
    if (arr[x][y] > k)
    {
      y--;
    }
    else if (arr[x][y] < k)
    {
      x++;
    }
    else
    {
      *px = x;
      *py = y;
      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;
  yangshijuzhen(arr, k, &x, &y);
  if (x == -1 && y == -1)
  {
    printf("找不到\n");
  }
  else
  {
    printf("找到了,是%d,%d\n", x, y);
  }
  return 0;
}

(1)如果我们不想在函数部分就打印坐标进行判断,而是返回到主函数里面再进行打印,但是又

不能返回2个值,因为写作return x,y是不对的;

(2)我们的解决方案是把传进去的函数和列数3,3全部改写成指针,把对应的和函数和列数的循

环条件也是用指针的解引用进行表示;

(3)如果可以找到我们就返回空,因为地址是可以传入主函数的,如果找不到,就返回2个-1;

相关文章
|
1月前
|
算法 C语言
C语言:杨氏矩阵、杨氏三角、单身狗1与单身狗2
C语言:杨氏矩阵、杨氏三角、单身狗1与单身狗2
29 0
|
1月前
|
C语言
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)(上)
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)
27 0
|
18天前
|
算法 C语言
C语言——oj刷题——杨氏矩阵
C语言——oj刷题——杨氏矩阵
|
1月前
|
算法 C语言
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)(下)
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)
12 0
|
1月前
|
C语言
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)(中)
C语言进阶⑫(指针下)(指针和数组笔试题解析)(杨氏矩阵)
26 0
|
11月前
|
C语言
C语言:杨氏矩阵中查找某数(时间复杂度小于O(N))
题目: 有一个数字矩阵(二维数组), 矩阵的每行从左到右是递增的, 矩阵从上到下是递增的, 请编写程序在这样的矩阵中查找某个数字是否存在, 要求:时间复杂度小于O(N)。
242 1
|
11月前
|
C语言
C语言之每日一题——杨氏矩阵
C语言之每日一题——杨氏矩阵
|
1月前
|
C语言
C语言第四十六弹---最快方法找到杨氏矩阵中的数下标
C语言第四十六弹---最快方法找到杨氏矩阵中的数下标
|
7月前
|
存储 算法 C语言
【C语言刷题】猜名次、猜凶手、杨辉三角、杨氏矩阵、字符串左旋、判断是否为左旋子串
【C语言刷题】猜名次、猜凶手、杨辉三角、杨氏矩阵、字符串左旋、判断是否为左旋子串
56 0
|
10月前
|
算法 C语言
C语言杨氏矩阵
C语言杨氏矩阵
45 0