C语言练习12---杨辉三角

1.二维数组法

比较简单

思路:

每行的中间元素等于其   上一行的元素    加上   上一行减一的元素

#include <stdio.h>
#include <stdlib.h>

#define ROW 100  //行
#define COS 100  //列

 //二维数组
void YHTrile_Twodim(int n, int(*arr)[COS])
{
        //特殊处理
	for (int i = 0; i < n; i++)
	{
		arr[i][0] = 1;
		arr[i][i] = 1;
	}
	
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j <= i; j++)
		{
			if (i>1 && j != 0 && j != i)
			{
				arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
			}
			printf("%-5d ",arr[i][j]);
		}
		printf("\n");
	}
}


int main()
{
	int arr[ROW][COS] = { 0 };
	int n = 0;
	printf("\n");
	YHTrile_Twodim(10, arr);
	system("pause");
	return 0;
}

​​​​​​​C语言练习12---杨辉三角

2. 一维数组法

比较难思考一点

请看图解:

C语言练习12---杨辉三角

 思路如下:

(1). 对前两个元素初始化为1,前两个数足以打印打印第一行和第二行

(2). 到了第三行 利用这两个数 再在其后 赋予1这个元素

  此时数组为    1    1    1  三个元素

 再让其 倒数第二个数 等于 其本身  加上 前面一个元素

 此时数组为    1     2    1  打印出第三行

(3). 到了第四行 数组为  1     2     1    1   四个元素

   再让其 倒数第二个数 等于 其本身  加上 前面一个元素

   再让其 倒数第三个数 等于 其本身  加上 前面一个元素

 此时数组为    1   3   3   1 

每到下一行都会改变数组的元素,然后再增加1这个元素,利用同一组数不断改变,来实现的!!

根据思路,加上循环就可实现

#include <stdio.h>
#include <stdlib.h>

#define ROW 100  
#define COS 100  

void YHTrile_Onedim(int n, int *arr)
{
	arr[0] = 1;  //第一行
	printf("%-5d\n", arr[0]);
	arr[1] = 1;  //第二行
	printf("%-5d%-5d\n", arr[0], arr[1]);

	for (int i = 2; i < n; i++)  //后n-2行
	{
		arr[i] = 1;    //每行最后一个元素置1
		for (int j = i - 1; j>0; j--)
		{
			arr[j] = arr[j - 1] + arr[j];
		}
		for (int k = 0; k <= i; k++)
		{
			printf("%-5d", arr[k]);
		}
		printf("\n");
	}
}

int main()
{
	int arr[ROW*COS] = { 0 };
	printf("\n");
	YHTrile_Onedim(10, arr);
	system("pause");
	return 0;
}

C语言练习12---杨辉三角

上一篇:数据万象应用书孰直播来袭 | 直播间好礼享不停


下一篇:怪了,为什么一些场景中使用余弦相似度而不是欧式距离