蓝桥杯疑似例题解答方案(打印任意阶杨辉三角)

题目:输入n,打印n阶的杨辉三角


杨辉三角是一种特殊的由数字构成的三角形,边缘上的数字都是1,内部的数字则是左上角和右上角数字的加和。它本质上其实是二项展开的系数序列(我们通过这个性质可以给出一种与本篇文章的方法不同的解决方案,不过我们这次不讨论。)

事实上,在不适用二项展开序列的性质的前提下,单纯的计算杨辉三角的某个位置的数值已经过于复杂,因为这意味着你必须把以它为顶点的等腰倒三角的所有项都算出来以有利于你进行对它本身的运算,这给了我们很大的麻烦。

第二个难点在于,杨辉三角必须以特殊的方法进行打印,不然从终端(Terminal)上来看,就会从等腰三角形变成直角三角形,这个直角三角形看起来不是很美观,因此不合适。

下面我给出一种计算出并打印任意阶杨辉三角的解决方案,本方案基于加和定义给出。

前面几篇有关蓝桥杯例题的文章中我的代码都是一个int main解决一切的,有朋友批评我耦合度太高,事实上,因为我认为它们没有很大难度,因此没有必要进行低耦合的写法,一口气解决也就罢了。但是为了回应这种质疑声,我这次采取低耦合的方法写,将代码拆分出两个功能性函数funcSetOne()和funcSetOther()。

警告:由于十进制导致的问题,有些数字是一位的,有些是两位的,大一些的数字有四五位的,由于它们长度不同,因此打印杨辉三角的时候,很有可能会从某阶开始歪掉,这是正常情况,也是无可奈何的事情。

下面展示完整的代码:

cpp 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
void funcSetOne(int arr[30][30],int a) {
	int u = 0; int t = 0;
	t = a;
	while (u < t) {
		arr[u][a] = 1;
		u++; a--;
	}
	u = 0; a = t;
	while (u < a) {
		arr[u][t] = 1;
		u++; t++;
	}
}
void funcSetOther(int arr[30][30], int a) {
	int u = 2; int t = 0;
	t = a;
	while (u < t) {
		arr[u][a] = arr[u - 1][a - 1] + arr[u - 1][a + 1];
		u++; a--;
	}
	u = 2; a = t;
	while (u < a) {
		arr[u][t] = arr[u - 1][t - 1] + arr[u - 1][t + 1];
		u++; t++;
	}
}
int main()
{
	int input = 0; int t = 0;
	int ctrl_1 = 0;
	int ctrl_2 = 0;
	int arr[30][30] = { 0 };
	scanf("%d", &input);
	ctrl_1 = input;
	funcSetOne(arr,ctrl_1);
	if (ctrl_1 > 2) {
		for (ctrl_2 = 2; ctrl_2 < input - 1; ctrl_2++) {
			funcSetOther(arr, ctrl_1+t);
			t+=2;
		}
	}
	int x = 0, y = 0;
	for (x = 0; x < input; x++) {
		for (y = 0; y < 2 * input + 1; y++) {
			if (arr[x][y] == 0) {
				printf(" ");
			}
			else {
				printf("%d", arr[x][y]);
			}
		}
		printf("\n");
	}
	return 0;
}
相关推荐
猿究院_夏燊1 小时前
Spring Bean 生命周期
java·后端·spring
inrichtt2 小时前
第八课时:SPI总线揭秘:四线全双工通信的奥
c语言·数据结构·stm32·单片机·嵌入式硬件
救救孩子把2 小时前
AI面试八股文-21_21-多模态Agent面试题-Vision-Language-Agent
人工智能·面试·职场和发展·llava·多模态agent
HPtiger3 小时前
数据结构——选择排序
数据结构·算法·排序算法
康实训3 小时前
老年评估仿真实训平台架构设计与老年人能力评估实训室教学落地实践
大数据·人工智能·算法·实训室·实训室建设
DongQiShanRen3 小时前
六根硬件映射(四):归属澄清、两处不一致与卷十一总表
开发语言·人工智能·算法·rust·哈希算法·集成学习
CCblandy3 小时前
雪花 ID 四个边界实测:时钟回拨重号 500 个,前端 JSON.parse 直接丢精度
后端·python·算法·性能优化·架构
我是人✓3 小时前
SpringBoot项目的五种创建方式
java·spring boot·后端
丑梨数据3 小时前
信创环境里跑文档工具:格式兼容与本地合规的几个坑
数据结构·人工智能·算法·决策树·排序算法
把我格子衫拿来3 小时前
VTK 9.5 与 Qt 6 联合开发:从嵌入三维窗口到可维护的桌面架构
c++·python·qt·vtk·三维可视化