//杨氏矩阵
//有一个数字矩阵,矩阵的每一行从左到右是递增的,矩阵从上到下是递增的
// 请编写程序在这样的矩阵中,查找某个数字是否存在
// 要求时间复杂度小于O(N)
方法一:利用指针来实现
#include<stdio.h>
int chazhao(int arr[3][3], int *px, int *py, int k)
{
int x = 0;
int y = *py - 1;
while (x <= 2 && y >= 0)
{
if (k > arr[x][y])
{
x++;
}
else if (k < arr[x][y])
{
y--;
}
else
{
*px = x;
*py = y;
return 1;
}
}
return 0;
}
int main()
{
int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
int k = 0;
int x = 3;
int y = 3;
scanf("%d", &k);
int ret = chazhao(arr, &x, &y, k);
if (ret == 1)
{
printf("找到了,坐标是:(%d,%d)\n", x, y);
}
else
printf("没有找到\n");
return 0;
}
方法二:利用结构体来实现
#include<stdio.h>
struct point
{
int x;
int y;
};
struct point chazhao(int arr[3][3], int h, int l, int k)
{
struct point p = { -1,-1 };
int x = 0;
int y = l - 1;
while (x<=2&&y>=0)
{
if (k > arr[x][y])
{
x++;
}
else if (k < arr[x][y])
{
y--;
}
else
{
p.x = x;
p.y = y;
return p;
}
}
return p;
}
int main()
{
int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
int k = 0;
scanf("%d", &k);
struct point ret = chazhao(arr,3,3,k);
printf("%d %d",ret.x,ret.y);
return 0;
}