首页 > 试题广场 >

杨辉三角

[编程题]杨辉三角
  • 热度指数:14576 时间限制: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)
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)
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>
#include <vector>
using namespace std;

int main() {
    int n;
    cin >> n;

    vector<vector<int>> triangle(n);

    for (int i = 0; i < n; i++) {
        triangle[i].resize(i + 1);
        triangle[i][0] = 1;
        triangle[i][i] = 1;

        for (int j = 1; j < i; j++) {
            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];
            if (j < i) {
                cout << " ";
            }
        }
        cout << endl;
    }

    return 0;
}

发表于 2026-02-06 20:04:01 回复(0)
#include <stdio.h>
int sanjiao(int i);
int main() {
int n;
scanf("%d",&n);
sanjiao(n);
}
int sanjiao(int i)
{  
    int A[35][35];   //这里需要注意不能把A[35][35]写进第二个for循环中
    for(int k=1;k<=i;k++)
    {
        for(int j=1;j<=k;j++)
        {      //不可以在这里写A[k][j]因为每次循环都会声明A[k][j]导致报错                                      
            if(k==j || j==1) {A[k][j]=1;}
            else {A[k][j]=A[k-1][j-1]+A[k-1][j];}
            printf("%d ",A[k][j]);
        }
        printf("\n");
    }
    return 0;

}
发表于 2026-01-31 16:47:47 回复(0)
import math
n = int(input())
for i in range(n):
    print(' '.join(map(str,[math.comb(i,j) for j in range(i+1)])))
使用内置math库求解
发表于 2026-01-26 22:36:24 回复(0)
一开始傻傻地算阶乘,结果数太大了
#include <bits/stdc++.h>
using namespace std;
int main() {
    int n,i,j;
    cin>>n;
    vector <vector<int>> num(n,vector<int>(n));
    for(i=0;i<n;i++){
        for(j=0;j<=i;j++){
            if(i==1||j==i){
                num[i][j]=1;
            }
            else{
                num[i][j]=num[i-1][j-1]+num[i-1][j];
            }
            cout<<num[i][j]<<' ';
        }
        cout<<endl;
    }
}

发表于 2026-01-26 16:42:57 回复(0)
n=int(input())
x=[]
for i in range(n):
   if i==0:
     x.append([1])
   elif i>=1:
    y=[]
    for j in range(i+1):
        if j == 0:
            y.append(1)
        elif j>=1 and j<i:
            y.append(x[i-1][j]+x[i-1][j-1])
        elif j>=1 and j==i:
            y.append(1)
            x.append(y)

[print(' '.join(map(str, row))) for row in x]
发表于 2026-01-26 16:05:58 回复(0)
import sys
#算法打印当前的list
def prin(l:list):
    for i in l:
        print(i,end=" ")
    print()

n=int(input())
if n==1:
    print(1)
else:
    print(1)
    la=[1,1]
#遍历n行,每行生成和打印当前list
    for i in range(2,n+1):
        new=[1]
        for j in range(1,i-1):
            new.append(la[j-1]+la[j])
        new.append(1)
        la=new
        prin(la)

   
       
发表于 2026-01-20 12:11:22 回复(0)
#include <stdio.h>

int main() {
    int n, i, j;
    scanf ("%d", &n);
    int N[34][34];
    for (i = 0; i < n; i ++) {
    	printf ("1 ");
    	N[i][0] = 1, N[i][i] = 1;
		for (j = 1; j < i; j ++) {
			N[i][j] = N[i - 1][j] + N[i - 1][j - 1];
			printf ("%d ", N[i][j]);
		}
		if (i != 0) printf ("1");
		if (n != 1 && i != n - 1) printf ("\n");
	}
    return 0;
} //不检查presentation实在是太友好了

发表于 2026-01-19 01:18:18 回复(0)
import sys

for line in sys.stdin:
    a = line.split()
n = int(a[0])
# 把杨辉三角看成一个下三角矩阵
martix = [[0]*n for _ in range(n)]
martix[0][0] = 1
for i in range(1,n):
    for j in range(i+1):
        if j > 0:
            martix[i][j]=martix[i-1][j] + martix[i-1][j-1]
        else:
            martix[i][j] = 1

for i in range(n):
    print(' '.join(map(str,martix[i][:i+1])))

发表于 2026-01-17 20:38:00 回复(0)
def main():
    n = int(input())
    print(1)
    if n == 1:
        return
    print(f'1 1')
    if n == 2:
        return
    a = [1,1]
    for i in range(2, n):
        b = [1] * n
        for j in range(1, i):
            b[j] = a[j - 1] + a[j]
        a = b[:i + 1]
        print(' '.join(map(str, a)))


if __name__ == "__main__":
    main()

发表于 2026-01-16 21:23:57 回复(0)
#include <stdio.h>
int main() {
    int n;
    scanf("%d", &n);
    int yanghui[34][34]={0};
    for (int i=0;i<n;i++)
    {
        yanghui[i][0] = 1;
        yanghui[i][i] = 1;
           for (int j=1;j<i;j++)      //从2开始有效
           {
               yanghui[i][j] = yanghui[i-1][j-1]+yanghui[i-1][j];
           }
    }      
    for (int i=0;i<n;i++)
    {
        for (int j=0;j<=i;j++)
        {
            printf("%d ", yanghui[i][j]);
        }
        printf("\n");
    }

    return 0;
}
发表于 2026-01-15 15:18:19 回复(0)

问题信息

难度:
54条回答 1228浏览

热门推荐

通过挑战的用户

查看代码
杨辉三角