方法 1:
arr[4][4]={{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
{13,14,15,16}};
//arr 是一个4*4的杨氏矩阵
//r 是要查找的数字
void fun1(int arr[][4],int r,int x,int y)
{
int n = 0;//行
int m = y - 1;//列
while (n<x&&m>=0)
{
if (arr[n][m] < r)
{
n++;
}
else if (arr[n][m] > r)
{
m--;
}
else
{
printf("下标是 %d %d", n, m);
}
}
printf("不存在这个数字");
}
方法 2:
void fun2(int arr[][4], int r, int* px, int* py)
{
int n = 0;//行
int m = *py - 1;//列
while (n < *px && m >= 0)
{
if (arr[n][m] < r)
{
n++;
}
else if (arr[n][m] > r)
{
m--;
}
else
{
*px = n;//将查找到元素的横坐标赋给w
*py = m;//将查找到元素的纵坐标赋给m
return;
}
}
//如果二维数组中不存在这个数字
*px = 0;//将w赋值为0
*py = 0;//将m赋值为0
}
int main()//杨氏矩阵
{
int a;
scanf("%d", &a);//输入要查找的值
int arr[4][4] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
int w = 4;
int m = 4;
fun2(arr, a, &w, &m);
//这里函数传参传递 w 和 m 的地址,众所周知传址调用会产生修改原变量值的副作用
//因此,利用这一点,w和m现在储存的是查找到元素在数组中的下标或被我们修改后的值,据此我们可
//以判断要查找的元素是否存在以及打印这个元素在数组中的下标
if (w == 0 && m == 0)
printf("不存在这个数字");
else
printf("这个数字的下标为 %d %d", w, m);
return 0;
}