杨氏矩阵:矩阵的每行从左到右是递增的,矩阵从上到下也是递增的。
比如 1 2 3
4 5 6
7 8 9
这个就是一个杨氏矩阵
要求查找某个数字是否存在,若存在取出该元素的下标
解题思路:假使我们要找元素7,我们可以先从第一行的第3个元素和要查找的元素进行比较,3比7小,那么本行就不会有要查找的元素,我们将行数+1,在向下寻找,假如我们现在查找到了元素9,比7大,那么就执行列数-1,直到找到我们要查找的元素。
源码如下:
#include<stdio.h>
int find(int p[][3],int *r,int *c,int n)//使用指针接收行和列,及可以使用行和列的值,又可以将其改变然后输出
{
int x = 0;
int y = (*c)-1;//我们假使从第一行第3列开始比较,数组下标从0开始,所以y=*c-1
while (x<*r&&y>=0)//当数组的行小于3时并且列大于等于0时,执行循环,防止出现越界访问
{
if (p[x][y] > n)
{
y--;
}
else if(p[x][y]<n)
{
x++;
}
else
{
*r = x;
*c = y;
return 1;
}
}
return 2;
}
int main()
{
int arr[3][3] = { 1,2,3,4,5,6,7,8,9};//定义一个二维数组
int k = 0;
int x = 3;//行
int y = 3;//列
printf(“please input a number\n”);
scanf_s("%d", &k);//输入要查找的元素
int ret =find(arr, &x,&y,k);//创建一个变量接收函数传的值,
if (ret == 1)//ret==1说明找到了
{
printf("%d %d\n", x, y);//输出找到的了的元素的下标
printf("zhaodaole ");
}
else
{
printf("meizhaodao ");//ret!=1时
}
return 0;
}