先来说明一下什么叫做杨氏矩阵
如果一个矩阵的每一行从左至右依次递增,每一列从上到下依次递增,则成这样的矩阵为杨氏矩阵。
那么接下来,来实现在杨氏矩阵中查找某个元素的算法
#include<stdio.h>
void find_k(int arr[][3], int k)
{
int count = 0;
while (1)
{
if (arr[count][2] > k)
{
for (int i = 0;i < 3;i++)
{
if (arr[count][i] == k)
{
printf("k所在的行为%d所在的列为 %d\n", count, i);
}
}
if (count == 2)
{
break;
}
count++;
}
else if (arr[count][2] < k)
{
count++;
if (count == 3)
{
printf("没有找到\n");
break;
}
continue;
}
else if (arr[count][2] == k)
{
printf("k所在的行为%d所在的列为 %d\n", count, 2);
if (count == 2)
{
break;
}
count++;
continue;
}
}
}
int main()
{
int arr[3][3] = { {1,2,3},
{2,5,6},
{3,8,9} };
int k;
scanf_s("%d", &k);//某些编译器的特殊要求
find_k(arr, k);
while (1);
return 0;
}
以上算法的基本思想就是,从右上角第一个元素开始查找,如果这个元素大于我们要查找的数,那么就查找这一行,再依次向下进行,如果这个元素小于我们要查找的数,那么说明这个元素所在的这一行肯定不存在我们要找的这个数,这个算法肯定不是最简单的,但是比暴力求解要强一些,希望大家批评指正