(C语言)杨辉三角与杨氏矩阵

杨辉三角与杨氏矩阵的求解

文章目录

  • 杨辉三角与杨氏矩阵的求解
  • 一、杨辉三角
    • 1、杨辉三角的概念
    • 2、杨辉三角形图
    • 3、杨辉三角的规律
    • 4、杨辉三角的代码实现
    • 5、杨辉三角的代码实现效果图
  • 二、杨氏矩阵查找问题
    • 1、杨氏矩阵的概念
    • 2、杨氏矩阵规律
    • 3、杨氏矩阵的求解思路
    • 4、杨氏矩阵的代码实现
    • 5、杨氏矩阵的代码实现效果图
  • 如果这篇文章对你有帮助,请帮忙点个赞!!!
  • 你的点赞是我最大的动力

一、杨辉三角

1、杨辉三角的概念

杨辉三角,是二项式系数在三角形中的一种几何排列,中国南宋数学家杨辉1261年所著的《详解九章算法》一书中出现。在欧洲,帕斯卡(1623----1662)在1654年发现这一规律,所以这个表又叫做帕斯卡三角形。帕斯卡的发现比杨辉要迟393年,比贾宪迟600年。

2、杨辉三角形图

2.杨辉三角形图
(C语言)杨辉三角与杨氏矩阵_第1张图片

3、杨辉三角的规律

(1)杨辉三角形上每一行的第一个数和最后一个数都是数字1。
(2)从第二行开始,每个数都等于它上方两数的和。
(3)第n行就会n个数字。

4、杨辉三角的代码实现

(1)将杨辉三角形上每一行的第一个数和最后一个数都赋值为1

for (i = 0; i < line; i++)
{
   //1.将每一行的第一个和最后一个赋值为1
   arr[i][0] = 1;
   arr[i][i] = 1;
}

(2)从第二行开始,每个数都等于它上方两数的和。求出它上方两数的和并且赋值给它。arr[i][j]上方两数字的坐标分别是arr[i-1][j-1]和arr[i-1][j]。

 for (i = 2; i < line; i++)
 {
 	int j = 0;
 	for (j = 1; j < i; j++)
 	{
 		arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
 	}
 }

(3)完整代码如下


//杨辉三角
int main()
{
	int arr[100][100] = {0};
	int line = 0;

	scanf("%d",&line);

	int i = 0;
	for (i = 0; i < line; i++)
	{
		//1.将每一行的第一个和最后一个赋值为1
		arr[i][0] = 1;
		arr[i][i] = 1;
	}
	//从第二行开始,上面两个数的和等于下面这个数
	for (i = 2; i < line; i++)
	{
		int j = 0;
		for (j = 1; j < i; j++)
		{
			arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
		}

	}
	//打印输出

	int j = 0;
	for (i = 0; i < line; i++)
	{

		int j = 0;
		for (j = 0; j < line - i - 1; j++)
		{
			printf(" ");//打印前面的空格
		}
		for (j = 0; j <= i; j++)
		{
			printf("%d ",arr[i][j]);
		}
		printf("\n");
	}
	return 0;
}

5、杨辉三角的代码实现效果图

(C语言)杨辉三角与杨氏矩阵_第2张图片

二、杨氏矩阵查找问题

1、杨氏矩阵的概念

杨氏矩阵,是对组合表示理论和舒伯特演算很有用的工具。它提供了一种方便的方式来描述对称和一般线性群的群表示,并研究它们的性质。杨氏矩阵是剑桥大学大学数学家阿尔弗雷德·扬在1900年提出。有一个二维数组.,数组的每行从左到右是递增的,每列从上到下是递增的, 在这样的数组中查找一个数字是否存在。

题目要求 时间复杂度小于O(N)。

2、杨氏矩阵规律

(C语言)杨辉三角与杨氏矩阵_第3张图片
(1)杨氏矩阵每行,每列的数都是依次递增的
(2)每一行的最后一个数是最大的

3、杨氏矩阵的求解思路

我们可以把我们需要找的数与每一行最后一个数来进行比较:
如果我们要找的数(k)>最后一个数字,我们就从下一开始寻找;
如果我们要找的数(k)<最后一个数字,我们就从下一开始寻找;
如果我们要找的数(k)==最后一个数字,我们就找到那个数字了。

4、杨氏矩阵的代码实现

//杨氏矩阵查找问题
void find(int arr[3][4], int row, int col, int k)
{
	int x = 0;
	int y = col-1;
	int flag = 0;
	while (x <= row && y >= 0)//注意这里的x小于等于行数
	{
		
		if (arr[x][y] > k)
		{
			y--;//这行最后一个数大于我们要查找的数,切换到下一列
		}
		else if (arr[x][y] < k)
		{
			x++;//这行最后一个数小于我们要查找的数,切换到下一行
		}
		else if(arr[x][y]==k)
		{
			printf("找到了,下标是%d行,%d列\n",x,y);
			flag = 1;
			break;
		}

	}
	if(flag==0)
	printf("找不到");
}

int main()
{
	int arr[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };

	int key = 10;
	int x = 3;
	int y = 4;//坐标
	find(arr, x, y, key);
	return 0;
}

5、杨氏矩阵的代码实现效果图

(C语言)杨辉三角与杨氏矩阵_第4张图片

如果这篇文章对你有帮助,请帮忙点个赞!!!

你的点赞是我最大的动力

你可能感兴趣的:(c语言,算法,矩阵)