首页 > 试题广场 >

杨辉三角

[编程题]杨辉三角
  • 热度指数:10873 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}杨辉三角形,又称帕斯卡三角形,第 i+1 行是二项式展开 (a+b)^i 的系数。
\hspace{15pt}三角形中任意元素等于上一行同列元素与上一行前一列元素之和。
\hspace{15pt}下面给出杨辉三角形的前 4 行:

\begin{matrix}<br />1\\<br />1 & 1\\<br />1 & 2 & 1\\<br />1 & 3 & 3 & 1<br />\end{matrix}

\hspace{15pt}给定正整数 n,请输出杨辉三角形的前 n 行。

输入描述:
\hspace{15pt}在一行输入一个整数 n \left(1 \leqq n \leqq 34\right)


输出描述:
\hspace{15pt}输出杨辉三角形的前 n 行。每一行从该行第一个元素开始,依次输出;每两个数之间用一个空格分隔。请不要在行末输出多余的空格。
示例1

输入

4

输出

1
1 1
1 2 1
1 3 3 1

说明

n=4 时,杨辉三角形的前 4 行如上所示。
示例2

输入

1

输出

1

说明

n=1 时,杨辉三角形只有第 1 行,元素为 1
#include <stdio.h>
int main()
{
    int n=0;
    scanf("%d",&n);
    int a[n+1][n+1];
    for(int i=0;i<n;i++)
    {
        a[i][i]=1;
        a[i][0]=1;
        for(int j=0;j<=i;j++)
        {
            if(j>0&&j<i)//这个限制条件可好的很啊
            {
                a[i][j]=a[i-1][j]+a[i-1][j-1];
            }
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
    return 0;
}
并没有太多用得着解释的,就是之前没有初始化数组,如果直接用n[i-1][j-1]+n[i-1][j]来算的话会爆出乱码;所以我加了这个限制条件,刚好能够满足题目要求。
希望我的答案对您有所帮助,欢迎留言。
发表于 2025-11-25 08:38:05 回复(0)
#include <iostream>
#include <bits/stdc++.h>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;
    int s[n][n];

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if(j==0||i==j){
                s[i][j]=1;
            }else if(j!=0&&i!=j&&i>j)
            {
                s[i][j] = s[i-1][j]+s[i-1][j-1];
            }
            else {
                s[i][j]=0;
            }
            if(s[i][j]!=0){
                cout << s[i][j] << " ";
            }
        }
        cout << endl;
    }
}

发表于 2025-07-16 11:32:01 回复(0)
n = int(input())

prev_row = []
for i in range(n):
    row = [1] * (i + 1)
    for j in range(1, i):
        row[j] = prev_row[j-1] + prev_row[j]
    print(' '.join(map(str, row)))
    prev_row = row

发表于 2025-07-07 18:17:03 回复(0)
#include <iostream>
using namespace std;

int main() {
   int n;
   cin >> n;
   int *p = new int[(1+n)*n/2];
   int cnt = 0;
   for (int i = 0; i < n; ++i){
    for (int o = 0; o <= i; ++o){
        if (o==0||o==i){
            p[cnt] = 1;
            ++cnt;
        }else {
            p[cnt] = p[(i)*(i-1)/2+o]+p[(i)*(i-1)/2+o-1];
            ++cnt;
        }

    }
   }
   int number = 0;
    for (int i = 0; i < n; ++i){
    for (int o = 0; o <= i; ++o,++number){
        cout << p[number] << ' ';
    }
        cout << endl;
   }
   delete[] p;
   
}
发表于 2025-12-12 16:07:21 回复(0)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[][] arr = new int[n][n];
        //将外围赋值为1
        for (int i = 0; i < n; i++) {
            arr[i][0] = 1;
            arr[i][i] = 1;
        }
        //将里面的数赋值,要求的数为上面那个数和上面傍边那个数的和
        for (int i = 2; i < n; i++) {
            for (int j = 1; j < i; j++) {
                arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
            }
        }
        //打印杨辉三角形
        for (int i = 0; i < n; i++) {
            for (int j = 0; j <= i; j++) {
                System.out.print(arr[i][j]+" ");
            }
            System.out.println();
        }

    }
}
发表于 2025-11-25 20:38:51 回复(0)
n=int(input())
a=[[0 for _ in range(n)]for _ in range(n)]
for m in range(n):
    a[m][0]=1
for i in range(1,n):
    for j in range(1,i+1):
        a[i][j]=a[i-1][j]+a[i-1][j-1]
for i in range(n):
    for j in range(i+1):
        print(a[i][j],end=" ")
    print()

发表于 2025-11-21 18:36:29 回复(0)
#include <bits/stdc++.h>
using namespace std;
int a[40][40];
int main(){
    int n;cin>>n;
    a[0][1]=0;a[0][0]=1;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            a[i][j]=0;
           
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=i;j++){
            a[i][j]=a[i-1][j]+a[i-1][j-1];
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=i;j++){
            cout<<a[i][j]<<' ';
        }
        cout<<endl;
    }
   
}
发表于 2025-11-07 20:15:35 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int n = in.nextInt();
        int[][] a = new int [n + 1][n + 1];

        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                if (i == 1 || j == i) {
                    a[i][j] = 1;
                    if (i == 1 && j == 1) {
                        System.out.println(a[i][j]);
                    } else if (j == i) {
                        System.out.println(a[i][j]);
                    } else {
                        System.out.print(a[i][j] + " ");
                    }
                } else {
                    a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
                    System.out.print(a[i][j] + " ");
                }

            }
        }

    }
}
发表于 2025-09-28 16:30:20 回复(0)
n=int(input())
a = [[0] * n for _ in range(n)]  
for i in range(n):
          a[i][0]=1
          a[i][i]=1
for i in range(2, n):      
    for j in range(1, i):  
        a[i][j] = a[i-1][j] + a[i-1][j-1]      
       
for i in range(n):
    for j in range(n):
        if j<=i:
            print(a[i][j], end=' ')
    print()            

发表于 2025-09-26 16:24:08 回复(0)
#include <iostream>
using namespace std;
#include <vector>

int main() {
    int n;
    cin >> n;
    vector<vector<int>> v(n);
   for(int i = 0; i < n; ++i){
        v[i].resize(i+1);
        v[i][0] = 1;
        v[i][i] = 1;

        for(int j = 1; j < i; ++j){
            v[i][j] = v[i-1][j] + v[i-1][j-1];
        }
   }

    for(int i = 0; i < n; ++i){
        for(int j = 0; j <= i; ++j){
            cout << v[i][j] << ' ';
        }
        cout << endl;
    }
}

发表于 2025-12-17 03:32:04 回复(0)
#include <stdio.h>

int main() 
{
    int n;
    scanf("%d",&n);
    int array[n][n];
    for(int i=0;i<n;i++){
        array[i][i]=1;
        array[i][0]=1;
    }
  //(1)n×n的矩阵,副对角线和第一列(数组序号为0)都为1
    for(int i=2;i<n;i++){
        for(int j=1;j<=i-1;j++){
            array[i][j]=array[i-1][j-1]+array[i-1][j];
        }
    }
  //(2)从矩阵的第三行(数组序号为2)开始,有经典规律a[i][j]=a[i-1][j-1]+a[i-1][j]
  //外层i控制行数切换,内层j控制列数切换,易错点为j<=i,j从1开始
    for(int i=0;i<n;i++){
        for(int j=0;j<=i;j++){
            printf("%d ",array[i][j]);
        }
    printf("\n") ;  
    }
  //(3)输出杨辉三角,注意在本行全部遍历后添加换行符。
    return 0;
}
    


发表于 2025-12-16 18:12:02 回复(0)
init = [1]
init1 = [1,1]
n= int(input())
print(*init)
print(*init1)
def gen_new_row(row1:list):
    app_row = row1+[0]
    new_row = [1]
    for i in range(len(app_row)-1):
        new_row.append(app_row[i]+app_row[i+1])
    print(*new_row)
    return new_row
new_row = init1
for i in range(n):
    if i >1:
        new_row = gen_new_row(new_row)
发表于 2025-12-04 11:17:33 回复(0)
n = int(input())
l = [[0]*(n+1) for i in range(n+1)]
for i in range(1, n+1): # 控制行
    for j in range(1,i+1): # 控制列数
        if i == 1 and j == 1:
            l[1][1] = 1
        else:
            l[i][j] = l[i-1][j] + l[i-1][j-1]
        print(l[i][j],"",  end='')
    print()
发表于 2025-12-02 15:15:48 回复(0)
#include <iostream>
#include <vector>
using namespace std;

int main()
{
    int n;
    cin>>n;
    int i,j;
    vector<vector<int>>a(n);
    for(i=0;i<n;i++)
    {
        a[i].resize(i+1); //限制每第i+1行的元素个数为i+1个(数组从零开始算)
        a[i][0]=a[i][i]=1;
        for(j=1;j<i;j++) //j=1是因为从第三行第二个元素开始才符合杨辉三角定律
        {
            a[i][j]=a[i-1][j] + a[i-1][j-1];
        }
        for (j = 0; j <= i; j++)
        {
            cout << a[i][j] << " ";
        }
        cout << endl;
    }
   

}

发表于 2025-11-26 15:14:36 回复(0)
import java.util.Scanner;
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int a=0;
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            a = in.nextInt();
        }
            int []temory=new int [a+1];
            int []main=new int[a+1];
            StringBuffer create=new StringBuffer();
            int count=1;
            int k=0;
            while(count<=a){
                if(count==1){
                    System.out.println("1");
                }
                if(count==2){
                    temory[0]=1;
                    main[0]=1;
                    temory[1]=1;
                    main[1]=1;
                    System.out.println("1"+" "+"1");
                }if(count>2){
                    if(count%2==0){
                        k=count/2;
                    }
                    if(!(count%2==0)){
                        main[(count-1)/2]=temory[(count-1)/2]+
                        temory[((count-1)/2)-1];
                        k=(count-1)/2;
                    }
                    main[count-1]=1;
                    for(int i=0;i<k;i++){
                        main[i+1]=temory[i]+temory[i+1];
                        main[count-i-2]=main[i+1];
                    }
                    for(int i=0;i<=count-1;i++){
                        temory[i]=main[i];
                        create.append(main[i]+" ");
                    }
                    System.out.println(create);
                create.delete(0,create.length());
                }
                count++;
            }
       
    }
}
发表于 2025-11-24 22:52:09 回复(0)
#include <iostream>
using namespace std;

int main()
{
    int arr[34][34] = {0};
    int n;
    cin >> n;
    for(int i = 0;i < n;i++)
    {
        for(int j = 0;j <= i;j++)
        {
            if(j == 0 || j == i)
            {
                arr[i][j] = 1;
            }
            else {
                arr[i][j] = arr[i-1][j] + arr[i-1][j-1];
            }
            cout << arr[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}
发表于 2025-11-24 21:53:17 回复(0)
#include <stdio.h>
int main(){
    int n,arr[34][34];
    scanf("%d",&n);
    for(int i = 0;i<n;i++){
        for(int j = 0; j <= i;j++){
            arr[i][j]=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("%d ",arr[i][j]);
        }
        printf("\n");
    }
}
发表于 2025-11-17 21:45:02 回复(0)
#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
using vi = vector<int>;
void solve() {
    int n;cin >> n;
    vi a(n);
    a[0] = 1;
    for (int i = 0;i < n;i++) {
        for (int j = i;j>=1;j--) {
            a[j] += a[j - 1];
        }
        for (int j = 0;j <= i;j++) {
            cout << a[j] << " ";
        }
        cout << endl;
    }
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);cout.tie(nullptr);
    int t = 1;
    //cin >> t;
    for (int i = 1; i <= t; i++) {
        //cout << "----Test " << i << "----" << endl;
        solve();
    }
    return 0;
}
一维的
发表于 2025-11-13 12:52:57 回复(0)
import sys

for line in sys.stdin:
    n = int(line.strip())
    dp = [[0]*n for _ in range(n)]
    for i in range(n):
        dp[i][0]=1
    for i in range(1,n):
        for j in range(1,n):
            dp[i][j]=dp[i-1][j]+dp[i-1][j-1]
    for i in dp:
        for j in i:
            if j:
                print(j,end=" ")
        print()

发表于 2025-10-29 11:06:50 回复(0)
#include<bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin >> n;
    
    // 创建二维数组存储杨辉三角
    int triangle[n][n];
    
    // 初始化数组
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            triangle[i][j] = 0;
        }
    }
    
    // 填充杨辉三角
    for(int i = 0; i < n; i++){
        // 每行的第一个和最后一个元素都是1
        triangle[i][0] = 1;
        
        // 计算中间的元素
        for(int j = 1; j <= i; j++){
            if(j == i){
                triangle[i][j] = 1; // 每行最后一个元素为1
            } else {
                triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j];
            }
        }
    }
    
    // 输出杨辉三角
    for(int i = 0; i < n; i++){
        for(int j = 0; j <= i; j++){
            cout << triangle[i][j] << " ";
        }
        cout << endl;
    }
    
    return 0;
}
发表于 2025-10-27 20:17:02 回复(0)

问题信息

难度:
41条回答 996浏览

热门推荐

通过挑战的用户

查看代码
杨辉三角