浅谈杨辉三角(实现三角阵打印)与杨氏矩阵(实现杨氏矩阵查找)

●杨辉三角算是数学里面的概念.但程序题中也时常出现。

什么是杨辉三角?
每行数字左右对称,由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;
}

浅谈杨辉三角(实现三角阵打印)与杨氏矩阵(实现杨氏矩阵查找)_第1张图片

杨氏矩阵与杨辉三角只是名字上有些类似而已,并没有什么联系。

什么是杨氏矩阵?
我们认为:如果一个矩阵每一行从左至右依次递增,每一列从上到下依次递增,
则称这样的矩阵为杨氏矩阵。



●杨氏矩阵查找也是基于杨氏矩阵这个特殊矩阵下所进行的查找

怎样查找?

基于矩阵每一行从左至右依次递增,每一列从上到下依次递增的特性.
如果所查找的数大于第一行的最后一个数,则行数加一,走到下一行的最后一个数进行比较
,否则列数减一,与该行的前一个数进行比较。

代码如下:
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;
     }

实在难得,建议收藏一波!!!

你可能感兴趣的:(认知与理解,C编程题,c语言)