分析:杨氏矩阵的特点是:这个矩阵中的数字从左到右是递增的,从上到下也是递增的。知道了这个特点就好写程序了。如有以下矩阵:
2 3 4
3 4 5
4 5 6
或没有对角线规律的杨氏矩阵:
3 6 8
5 9 10
8 13 15
思路:输入要查找的数n,用n和这个矩阵的右上角元素比较,如果大于右上角元素,则行值自增,向下一行移动;如果小于右上角元素,则列值自减,向左一列移动;如果等于右上角元素,说明找到该值,返回1。接着执行循环,用n值与接下来的数比较,直到找到这个数返回1或者找不到这个数结束循环。
代码如下:
第一个矩阵:
#include<stdio.h>
int y_search(int b[][3],int i,int n)
{
int j=0;
i--;
for(j=0;j<=i;)
{
if(n>b[j][i])
{
j++;
}
else if(n<b[j][i])
{
i--;
}
else if(n==b[j][i])
{
return 1;
}
}
}
int main()
{
int y_search(int b[][3],int i,int n);
int a[][3]={{2,3,4,},{3,4,5},{4,5,6}};
int n;
printf("请输入要查找的整数n:\n");
scanf("%d",&n);
if(y_search(a,3,n)==1)
{
printf("输入的数字被找到\n");
}
else
{
printf("输入的数字没有被找到\n");
}
return 0;
}
运行结果:
(注:要实现在没有对角线规律的杨氏矩阵中查找一个数只需将数组元素的值改变即可)。