杨辉三角问题 杨氏矩阵

1.杨辉三角

2.杨氏矩阵

1.什么是杨辉三角:是二项式系数在三角形中的一种几何排列。如图所示:

杨辉三角问题 杨氏矩阵_第1张图片

 从这个正三角的角度想会不会简单一点呢?

杨辉三角问题 杨氏矩阵_第2张图片

 解题思路:

1,把这个三角看成一个方阵(n*n),由于三角的两侧都是1,所以开始定义数组为全部都是1。

杨辉三角问题 杨氏矩阵_第3张图片

 2,从杨辉三角中可以看到一个规律,我们不看轮廓,看里面的内容。可以得出:这一行的值等于前一行正上方的数加上正上方前面的数之和。杨辉三角问题 杨氏矩阵_第4张图片

 3,刚一开始我们设计的是方阵,但是我们需要是三角,这时候需要两个for循环,行控制列打印下部分的内容即可。

 杨辉三角问题 杨氏矩阵_第5张图片

 代码如下:

#include 
#define row 9
#define col 9
int main()
{
	int arr[row][col] = { 0 };
	int i = 0;
	int j = 0;
	for (i=0; i

 运行结果:以9*9为例子

杨辉三角问题 杨氏矩阵_第6张图片

 如果想要输出为金字塔三角形,可以这么做:可以看成先输出空格,然后输出数字,找到行数与空格,数字之间的练习就可以了。

for (i = 0; i < row; i++)
	{
		for (int k = 0; k < 26 - 6 * i / 2; k++)//打印空格
			printf(" ");
		for (j = 0; j <= i; j++)
		{
			printf("%-6d",arr[i][j]);
		}
		printf("\n");
	}

 杨辉三角问题 杨氏矩阵_第7张图片

2.什么是杨氏矩阵??就是有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的。

杨辉三角问题 杨氏矩阵_第8张图片

 

#include 
int find_num(int arr[][3], int x, int y,int n)
{
	int i = 0;
	int j = x - 1;
	while (j >= 0 && i < y )
	{
		if (n > arr[i][j])
		{
			i++;
		}
		else if (n < arr[i][j])
		{
			j--;
		}
		else
		{
			return 1;

		}
	}
	
	return 0;
}
int main()
{
	int arr[][3] = { {1, 3, 5},
				     {3, 5, 7},
				     {5, 7, 9} };
	int n = 0;
	scanf("%d",&n);
	int flag=find_num(arr, 3, 3,n);
	if (flag)
		printf("找到了\n");
	else
		printf("找不到\n");
	return 0;
}

杨辉三角问题 杨氏矩阵_第9张图片

 

你可能感兴趣的:(c语言)