基础算法练习:杨辉三角形

基础练习 杨辉三角形(蓝桥杯真题BASIC-6)


注意:这可能是你看过的关于杨辉三角题型最详细的题解,看完本文章你将对该类问题理解的相当通透!🤩


资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s


问题描述
杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。

它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。

下面给出了杨辉三角形的前4行:

在这里插入图片描述

给出n,输出它的前n行。


输入格式
输入包含一个数n。


输出格式
输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空格。


样例输入
4


样例输出
1
1 1
1 2 1
1 3 3 1


数据规模与约定
1 <= n <= 34。


思路:

观察标准杨辉三角的本质就是下面的数等于肩上两数的和,而题中所需的输出格式为当前数=上一行当前列+上一行上一列的和。
总结:第一个规律:每行第一个和最后一个数为1,第二个规律:下面的数等于肩膀上两数的和

题解法1(稍难理解版):

import java.util.Scanner;

public class Main {
   
    public static void main(String[] args) {
   
        Scanner in = new Scanner(System.in);
        //要输出杨辉三角形的前n行
        int n = in.nextInt();
        in.close();
        //定义一个二维数组,n行,n+1列
        int[][] sanjiao = new int[n][n + 1];
        for (int i = 0; i < sanjiao.length; i++) {
    //行
            for (int j = 1; j <= i + 1; j++) {
    //列
                //第一行输出[0][1]=1,之所以没有[0][0],是因为第二行需要[0][0]+[0][1]算出[1][1],所以[0][0]就使用默认值0
                if (i == 0) {
   
                    sanjiao[i][j] = 1;
                    //输出一个数据加一个空格
                    System.out.print(sanjiao[i][j] + " ");
                } else {
   
                    sanjiao[i][j] = sanjiao[i - 1][j - 1] + sanjiao[i - 1][j];
                    //输出一个数据加一个空格
                    System.out.print(sanjiao[i][j] + " ");
                }
            }
            //每一行结束加一个换行
            System.out.println();
        }
    }
}

在这里插入图片描述

题解法2(更容易理解版):

import java.util.Scanner;

public class Main {
   
    public static void main(String[] args) {
   
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[][] a = new int[n][n];
        in.close();
        for (int i=0;i<n;i++){
   
            //第一个规律,每行第一个和最后一个数为1
            a[i][0]=1;
            a
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于顺序队列模板简单应用算法设计:杨辉三角形,我们可以采取如下思路: 1. 定义一个顺序队列,并在其中存储每一行的数字。 2. 循环遍历每一行,在每行的开头加入一个1,然后在开头的1后面依次加入上一行相邻的两个数之和,最后在末尾加上一个1。 3. 循环输出每一行的数字即可。 算法实现的简单代码如下: ``` #include <iostream> using namespace std; const int MAXN = 100; template <typename T> class SeqQueue { public: SeqQueue() { front = rear = 0; } bool isEmpty() const { return front == rear; } bool isFull() const { return (rear + 1) % MAXN == front; } void enqueue(const T& x) { if (isFull()) { cerr << "Queue is full!" << endl; exit(1); } queue[rear] = x; rear = (rear + 1) % MAXN; } void dequeue() { if (isEmpty()) { cerr << "Queue is empty!" << endl; exit(1); } front = (front + 1) % MAXN; } T getFront() const { if (isEmpty()) { cerr << "Queue is empty!" << endl; exit(1); } return queue[front]; } private: T queue[MAXN]; int front, rear; }; void yanghuiTriangle(int n) { SeqQueue<int> Q; Q.enqueue(1); for (int i = 1; i <= n; ++i){ int last = 0; for (int j = 1; j <= i; ++j) { int tmp = Q.getFront(); Q.dequeue(); cout << tmp << " "; int sum = last + tmp; last = tmp; Q.enqueue(sum); } cout << endl; Q.enqueue(1); } } int main() { int n; cout << "请输入要输出的杨辉三角形的行数:"; cin >> n; yanghuiTriangle(n); return 0; } ``` 上述代码中,我们实现了一个简单的顺序队列模板和一个输出杨辉三角形的函数,通过调用该函数即可输出指定行数的杨辉三角形

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值