浅谈杨辉三角(实现三角阵打印)与杨氏矩阵(实现杨氏矩阵查找)
作者:互联网
●杨辉三角算是数学里面的概念.但程序题中也时常出现。
什么是杨辉三角?
每行数字左右对称,由1开始逐渐变大。
每个数字等于上一行的左右两个数字之和
即每个数等于它上方俩数之和。
下面就是杨辉三角的代码和打印结果
首先先初始化第一列的元素都是1,
然后按照每个数等于它上方俩数之和的规律,依次计算得出每一行的数,就可得到杨辉三角。
int main()
{
int str[30][30] = {0};
int i, j;
int n;
printf("请输入一个数:");
scanf("%d", &n);
for (i = 0; i < n; i++)
{
str[i][0] = 1;
}
for (i = 1; i < n; i++)
{
for (j = 1; j <=n; j++)
{
str[i][j] = str[i - 1][j - 1] + str[i - 1][j];
}
}
for (i = 0; i < n; i++)
{
for (j = 0; j < n - i - 1; j++)
{
printf(" ");
}
for (j = 0; j <= i; j++)
{
printf("%d ", str[i][j]);
}
printf("\n");
}
return 0;
}
杨氏矩阵与杨辉三角只是名字上有些类似而已,并没有什么联系。
什么是杨氏矩阵?
我们认为:如果一个矩阵每一行从左至右依次递增,每一列从上到下依次递增,
则称这样的矩阵为杨氏矩阵。
●杨氏矩阵查找也是基于杨氏矩阵这个特殊矩阵下所进行的查找
怎样查找?
基于矩阵每一行从左至右依次递增,每一列从上到下依次递增的特性.
如果所查找的数大于第一行的最后一个数,则行数加一,走到下一行的最后一个数进行比较
,否则列数减一,与该行的前一个数进行比较。
代码如下:
int Find(int (*a)[5],int row,int col,int x)
{
int i=0;
int j=col-1;
while(i<row&&j>=0)
{
if(x<a[i][j])
{
j--;
}
else if(x>a[i][j])
{
i++;
}
else
{
return 1;
}
}
return -1;
}
int main()
{
// 杨氏矩阵
int a[][5]={
{11,22,33,44,55},
{66,77,88,99,100},
{ 111,222,333,444,555},
};
int x=333;
int ret=Find(a,3,5,x);
printf("%d",ret);
return 0;
}
实在难得,建议收藏一波!!!
标签:浅谈,int,矩阵,++,杨氏,str,杨辉三角 来源: https://blog.csdn.net/cfk17829572643/article/details/111827140