[保研/考研机试] 杨辉三角形 西北工业大学复试上机题 C++实现

题目描述

Time Limit: 1000 ms

Memory Limit: 256 mb

输入n值,使用递归函数,求杨辉三角形中各个位置上的值。

输入描述:

复制代码
一个大于等于2的整型数n

输出描述:

复制代码
题目可能有多组不同的测试数据,对于每组输入数据,
按题目的要求输出相应输入n的杨辉三角形。

示例

输入:

cpp 复制代码
6

输出:

cpp 复制代码
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

思路:

杨辉三角第一行和第二行的内容很明显,从第三行开始就很有规律了:每一行的第一个和最后一个元素都是1,从第二个到倒数第二个元素都是上一行的两个相邻元素的和。 这里可以简单的分为奇数行和偶数行,只需要**用两个一维数组就可以,保存相邻的两行元素,不断迭代更新它们的内容,并及时输出。**虽然用一个二维数组来保存每一行的数值会简单许多,但是题目输入的是一个大于等于2的整数n,当n很大时,如果用一个二维数组来保存每一行的数值会占用较大的空间。

注意:根据题目的示例输出,这里并不需要输出杨辉三角第一行的数值1。

源代码:

cpp 复制代码
#include<iostream>
#include<vector>
using namespace std;

//习题8.1 杨辉三角形
int main()
{
	int n;
	vector<int> nums1 = { 1 };
	vector<int> nums2 = { 1,1 };
	while (cin >> n) {
		for (int i = 2; i <= n; i++) {
			if (i % 2 == 1) { //奇数行
				nums1.resize(1);
				for (int j = 1; j < i - 1; j++) {
					nums1.push_back(nums2[j - 1] + nums2[j]);
				}
				nums1.push_back(1);
				for (auto it : nums1) {
					cout << it << " ";
				}
				cout << endl;
			}
			else { //偶数行
				nums2.resize(1);
				for (int j = 1; j < i - 1; j++) {
					nums2.push_back(nums1[j - 1] + nums1[j]);
				}
				nums2.push_back(1);
				for (auto it : nums2) {
					cout << it << " ";
				}
				cout << endl;
			}
		}
	}
	
	return 0;
}

提交结果:

相关推荐
A尘埃13 分钟前
超市购物篮关联分析与货架优化(Apriori算法)
算法
.小墨迹19 分钟前
apollo学习之借道超车的速度规划
linux·c++·学习·算法·ubuntu
数智工坊22 分钟前
【数据结构-树与二叉树】4.3 二叉树的存储结构
数据结构
独好紫罗兰27 分钟前
对python的再认识-基于数据结构进行-a004-列表-实用事务
开发语言·数据结构·python
不穿格子的程序员30 分钟前
从零开始刷算法——贪心篇1:跳跃游戏1 + 跳跃游戏2
算法·游戏·贪心
大江东去浪淘尽千古风流人物32 分钟前
【SLAM新范式】几何主导=》几何+学习+语义+高效表示的融合
深度学习·算法·slam
铉铉这波能秀41 分钟前
LeetCode Hot100数据结构背景知识之列表(List)Python2026新版
数据结构·leetcode·list
重生之我是Java开发战士1 小时前
【优选算法】模拟算法:替换所有的问号,提莫攻击,N字形变换,外观数列,数青蛙
算法
仟濹1 小时前
算法打卡 day1 (2026-02-06 周四) | 算法: DFS | 1_卡码网98 可达路径 | 2_力扣797_所有可能的路径
算法·leetcode·深度优先
yang)1 小时前
欠采样时的相位倒置问题
算法