首页 > 试题广场 >

杨辉三角

[编程题]杨辉三角
  • 热度指数:5612 时间限制: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 <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)
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)
int main() {
    int n;
    scanf("%d",&n);
    int arr[n][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-1]+arr[i-1][j];
            }
            printf("%d ",arr[i][j]);

        }
        printf("\n");
    }
    return 0;
}
发表于 2025-10-15 20:43:29 回复(0)
#include<stdio.h>
int main()
{
    int n = 0;
    scanf("%d",&n);
    int arr[34][34] = {0};
    int i = 0;
    int j = 0;
    for(i = 0;i < n;i++)
    {
        for(j = 0;j <= i;j++)
        {
            if(j == 0)
            {
                arr[i][j] = 1;
            }
            if(j == i)
            {
                arr[i][j] = 1;
            }
            if(i >= 2 && j >= 1)
            {
                arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
            }
           

        }

    }
    for(i = 0;i < n;i++)
    {
        for(j = 0;j <= i;j++)
        {
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }

    return 0;
}
发表于 2025-10-14 21:07:36 回复(0)
def save_index(L, i, j): 
    try: 
        return L[i][j]
    except: 
        return 0
n = int(input())
L = [[] for _ in range (n)]
for i in range (n): 
    for j in range (n): 
        if (j == 0): 
            L[i].append(1)
        elif (j <= i): 
            L[i].append(save_index(L, i-1, j-1) + save_index(L, i-1, j))
for i in L: 
    print (*i)
使用try except,无法索引的矩阵位置视作0。
发表于 2025-10-14 15:12:43 回复(0)
#include <stdio.h>

int main() {
    int a;
    scanf("%d",&a);
    int con[a][a];
    for(int i =0;i<a;i++)
    {
        for(int j =0;j<=i;j++)
        {
            if(i<2)
            {
                con[i][j]=1;
            }
            else if(j==0||j==i)
            {
                con[i][j]=1;
            }
            else
            {
                con[i][j]=con[i-1][j]+con[i-1][j-1];
            }  
        }    
    }
    for(int i =0;i<a;i++)
    {
        for(int j =0;j<=i;j++)
        {
            printf("%d ",con[i][j]);
           
        }  
        printf("\n");  
    }
    return 0;
}
发表于 2025-10-09 20:33:03 回复(0)
#include<iostream>
#include<vector>
using namespace std;
int main()
{
    int n;
    cin >> n;
    vector<vector<int>> sz(n + 1, vector<int>(n + 1));
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            if (j == 1)
            {
                sz[i][j] = 1;
            }
            if (i == j)
            {
                sz[i][j] = 1;
            }
        }
    }
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            if (i >= 3 && j >= 2 && sz[i][j] != 1)
            {
                sz[i][j] = sz[i - 1][j] + sz[i - 1][j - 1];
            }
        }
    }
    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= n; j++)
        {
            if (sz[i][j] == 0)
            {
                continue;
            }
            cout << sz[i][j]<<" ";
        }
        cout << endl;
    }
    return 0;
}
发表于 2025-10-09 16:42:47 回复(0)
#include <stdio.h>

int main() 
{
    int n;
    scanf("%d",&n);
    if(n==1)
    printf("1");
    else if(n==2)
    printf("1\n1 1");
    else
    {
        int a[n+1][n+1];
        a[1][1]=a[2][1]=a[2][2]=1;
        printf("1\n1 1\n");
        int i,j;
        for(i=3;i<=n;i++)
        {
            a[i][1]=1;
            printf("%d ",a[i][1]);
            for(j=2;j<i;j++)
            {
                a[i][j]=a[i-1][j]+a[i-1][j-1];
                printf("%d ",a[i][j]);
            }
            a[i][i]=1;
            printf("%d",a[i][i]);
            if(i!=n)
            printf("\n");
        }

    }
    return 0;
}

发表于 2025-10-03 22:41:52 回复(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)
#include <stdio.h>
int main() {
    int a;
    scanf("%d", &a);
    int arr[a],temp1[a],temp2[a];
    for(int i=0;i<a;i++)
    {
        for(int j=0;j<i+1;j++)
        {
            int out;
            if(!j) out=1;
            else if(j==i) out=1;
            else  out=temp2[j-1]+temp2[j];
            printf("%d ", out);
            temp1[j] = out;
        }
        printf("\n");
        for(int j=0;j<i+1;j++)  temp2[j]=temp1[j];
    }
    return 0;
}

发表于 2025-09-26 17:59:58 回复(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;
int a[40][40];
int main() {
int n,sum=1;
cin>>n;
for (int i=0;i<n;i++) {
    for (int j=0;j<sum;j++) {
        if (j==0) {
        a[i][j]=1;
        cout<<a[i][j];
        cout<<' ';
        continue;
        }
    
        if (j>0&&j<sum) {
        a[i][j]=a[i-1][j]+a[i-1][j-1];
        cout<<a[i][j];
        cout<<' ';
        }
    }
sum++;
cout<<endl;
}
return 0;
}


发表于 2025-09-21 10:20:23 回复(0)
n = int(input())
a = [['']*n for _ in range(n)]
for i in range(n):
    for j in range(i+1):
        if i == j or j == 0:
            a[i][j] = 1
        else:
            a[i][j] = a[i-1][j-1] + a[i-1][j]
for row in a:
    print(*row)
发表于 2025-09-04 16:52:45 回复(0)
#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    int array[n][n];
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            array[i][j] = 0;
            // 对角线为1
            if(i == j){
                array[i][j] = 1;
            }
            // 第一列
            if(j == 0){
                array[i][j] = 1;
            }
            // 下三角其余部分
            else if(j < i){
                array[i][j] = array[i-1][j-1] + array[i-1][j];
            }
           
        }
    }
    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            if(array[i][j] == 0) continue;
            cout << array[i][j] << " ";  
        }
        cout << endl;
    }
}
发表于 2025-08-20 16:20:31 回复(0)
#include <stdio.h>

int main(){
    int n;
    int i,j;
    scanf("%d",&n);
    int arr[100][100];
    for(i=1;i<=n;i++){
        arr[0][0]=1;
        for(j=1;j<=n;j++){
            arr[i][j] = arr[i-1][j]+arr[i-1][j-1];
            if(arr[i][j] != 0){
                 printf("%d ",arr[i][j]);
            }
        }
        printf("\n");
    }
}
发表于 2025-08-01 16:02:49 回复(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[][] biarr = new int[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j <= i; j++) {
                if (j == 0 || j == i) biarr[i][j] = 1;
                else biarr[i][j] = biarr[i - 1][j - 1] + biarr[i - 1][j];
                System.out.print(biarr[i][j] + " ");
            }
            System.out.println();
        }
    }
}

发表于 2025-07-29 20:29:32 回复(0)
#include <stdio.h>
#include <stdlib.h>
int main() {
    int n;
    scanf("%d",&n);
    int **sz=(int **)malloc(n*sizeof(int *));
    for(int i=0;i<n;i++)
    sz[i]=(int *)malloc((i+1)*sizeof(int));
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<=i;j++)
        {
            if(j==0)sz[i][j]=1;
            if(i==j)sz[i][j]=1;
            if(i>j)sz[i][j]=sz[i-1][j-1]+sz[i-1][j];
            printf("%d ",sz[i][j]);
        }
       
        printf("\n");
    }
    return 0;
}
发表于 2025-07-20 15:01:44 回复(0)
def pask(n):
    lastrowlist = []
    for i in range(n):
        li = [1 for _ in range(1,i+2)]
        if i >= 2:
            for j in range(1,i):
                li[j] = lastrowlist[j-1]+lastrowlist[j]
        lastrowlist = li
        print(*li)
n = int(input())
pask(n)

发表于 2025-07-17 23:07:25 回复(0)
n = int(input())
an = []

for i in range (n):
    row = [1] * (i+1)
    for j in range (1, i):
        row[j] = an[i-1][j-1] + an[i-1][j]
    an.append(row)

for row in an:
    print(*row)
发表于 2025-07-16 20:32:30 回复(0)

问题信息

难度:
27条回答 628浏览

热门推荐

通过挑战的用户

查看代码
杨辉三角