首页 > 试题广场 >

杨辉三角

[编程题]杨辉三角
  • 热度指数:21485 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

KiKi知道什么叫杨辉三角之后对杨辉三角产生了浓厚的兴趣,他想知道杨辉三角的前n行,请编程帮他解答。杨辉三角,本质上是二项式(a+b)的n次方展开后各项的系数排成的三角形。其性质包括:每行的端点数为1, 一个数也为1;每个数等于它左上方和上方的两数之和。


输入描述:
第一行包含一个整数数n。 (1≤n≤30)


输出描述:

包含n行,为杨辉三角的前n行,每个数输出域宽为5。

示例1

输入

6

输出

    1
    1    1
    1    2    1
    1    3    3    1
    1    4    6    4    1
    1    5   10   10    5    1
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        List<List<Integer>> outerList = new ArrayList<>();
        for(int i=0;i<n;i++) {
            List<Integer> inner = new ArrayList<>();
            for(int j=0;j<=i;j++) {
                inner.add(1);
            }
            outerList.add(inner);
    }
        List<Integer> InnerList = new ArrayList<>();
        for(int i=2;i<n;i++) {
            InnerList = outerList.get(i);
            for(int j=1;j<InnerList.size()-1;j++) {
                int num1 = outerList.get(i-1).get(j-1);
                int num2 = outerList.get(i-1).get(j);
                InnerList.set(j,num1+num2);
            }
        }
        for(List<Integer> list : outerList) {
            for(Integer num : list) {
                System.out.printf("%5d",num);
            }
            System.out.println();
        }
    }
}
第二种简便方法:
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        List<List<Integer>> outerList = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            List<Integer> inner = new ArrayList<>();
            for (int j = 0; j <= i; j++) {
                if (j == 0 || j == i) {
                    inner.add(1);
                } else {
                    Integer integer1 = outerList.get(i - 1).get(j - 1);
                    Integer integer2 = outerList.get(i - 1).get(j);
                    inner.add(1,integer1+integer2);
                }
            }
            outerList.add(inner);
        }
        for(List<Integer> list : outerList) {
            for(Integer num : list) {
                System.out.printf("%5d",num);
            }
            System.out.println();
        }
    }
}

发表于 2021-03-19 18:45:47 回复(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];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j <= i; j++) {
                if (j == i || j == 0) {
                    arr[i][j] = 1;
                    System.out.printf("%5d", arr[i][j]);
                } else {
                    arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
                    System.out.printf("%5d", arr[i][j]);
                }
            }
            
            System.out.println();
        }
    }
}


发表于 2021-07-16 16:51:44 回复(0)
#include<stdio.h>
int main() {
    int num = 0, arr[30][30] = {0};
    scanf("%d", &num);
    for (int i = 0; i < num; i++) {
        for (int j = 0; j < num; j++) {
            if (i >= j) {
                if (j == 0 || i == j)
                    arr[i][j] = 1;
                else
                    arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
            }
            if (arr[i][j] != 0)
                printf("%5d", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

发表于 2022-08-06 16:30:19 回复(0)
#include <stdio.h>

int main(){
    int n, i, j, arr[30][30];
    scanf("%d", &n);
    for(i = 0; i < n; i++){
        for(int j = 0; j < i + 1; j++)
    	   arr[i][j] = (j == 0 || j == i)?1 : arr[i-1][j]+arr[i-1][j-1];
    }
    for(i = 0; i < n; i++){
        for(j = 0; j < i + 1; j++)
            printf("%5d", arr[i][j]);
        printf("\n");
    }
    return 0;
}

发表于 2022-06-13 14:57:53 回复(0)
#include<stdio.h>
int main()
{
    int arr[30][30] = { 0 };
    int i, j, n;
    scanf("%d", &n);

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

    return 0;
}

发表于 2021-11-17 02:10:14 回复(0)
num = int(input())
li = [[1],[1,1]] 
for i in range(2,num):
    li.append([1]*(i+1))
    for j in range(1,i):
        li[i][j] = li[i-1][j] + li[i-1][j-1]
for i in range(num):
    for j in range(0,i+1):
        print('{:5}'.format(li[i][j]),end='')
    print()

发表于 2021-09-24 11:34:05 回复(0)
#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int arr[n][n];
    for(int i = 0;i<n;i++){
        for(int j = 0;j<n;j++){
            if(i == j || j == 0)
                arr[i][j] = 1;
            else{
                
                arr[i][j] = arr[i-1][j -1 ] + arr[i - 1][j];
                
            }
            if( i>=j)
                cout<<setw(5)<<arr[i][j];
        }
        cout<<endl;
    }
    
    
    
}

发表于 2020-10-03 16:21:56 回复(0)
    int i,j,n;
    scanf("%d",&n);
    int num[30][30];
    for(i=0;i<n;i++)
    {
        for(j=0;j<=i;j++)
        {
            if(j==0||j==i)
            {
                num[i][j]=1;
            }
            else num[i][j]=num[i-1][j]+num[i-1][j-1];
            printf("%5d",num[i][j]);
        }
        printf("\n");
    }

发表于 2020-04-08 11:45:16 回复(0)
这算动态规划嘛?
#include <stdio.h>
int main()
{
    int a[35][35],b[15][15];
    int i,j,n,m,flag=1,k;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        a[i][0]=1;
        a[i][i]=1;
    }
    for(i=1;i<n;i++){
        for(j=1;j<=i;j++){
            a[i][j]=a[i-1][j-1]+a[i-1][j];
        }
    }
    for(i=0;i<n;i++){
        for(j=0;j<=i;j++){
            printf("%5d",a[i][j]);
        }
        printf("\n");
    }
}


发表于 2020-04-10 19:12:09 回复(2)
想了有十分钟,加油啊
n = int(input())
num = [[1] * i for i in range(1, n + 1)]
for i in range(n):
    for j in range(i + 1):
        if (i != 0 and i != 1) and (j != 0 and j != i):
                num[i][j] = num[i - 1][j - 1] + num[i - 1][j]
        print('{:5d}'.format(num[i][j]), end='')
    print()

发表于 2022-05-02 16:52:35 回复(0)
#include<stdio.h>

int main()
{
    int n=0;
    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("%5d",arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

编辑于 2024-04-07 23:47:18 回复(0)
#include <stdio.h>

int Yangh(int n, int m)
{
    if(n == m || m == 0)
    {
        return 1;
    }
    return Yangh(n - 1, m) + Yangh(n - 1, m - 1);
}

int main() 
{
    int n = 0;
    int i = 0;
    int j = 0;

    scanf("%d", &n);
    
    for(i = 0; i < n; i++)
    {
        for(j = 0; j <= i; j++)
        {
            printf("%5d", Yangh(i, j));
        }
        printf("\n");
    }

    return 0;
}

发表于 2024-03-20 18:44:37 回复(0)
#include <stdio.h>
int main() {
    int arr[30][30] = {0};
    int i = 0;
    int j = 0;
    int n = 0;
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        for (j = 0; j <= i; j++) {
            if (i == j)
                arr[i][j] = 1;
            if (j == 0)
                arr[i][j] = 1;
            if (i > 1 && j > 0)
                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("%5d", arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

编辑于 2024-01-24 23:24:27 回复(0)
#include <stdio.h>
int main()
{
    int n;
    int j = 0;
    int arr[100][100];
    while(scanf("%d",&n) != EOF)
    {
      int i = 0;
      int a = 1;
      for(i = 0;i<n;i++)
      {
        for(j = 0;j<=i;j++)
        {
            if(i == j || j == 0)
            {
                arr[i][j] = a;
            }
            else {
            arr[i][j] = arr[i-1][j-1]+arr[i-1][j];
            }
            printf("%5d",arr[i][j]);
        }
        printf("\n");
       }
      }
    return 0;
}
发表于 2023-06-03 20:53:45 回复(0)
采用递归实现杨辉三角形
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;

vector<vector<int> > arr;

void print(int n,vector<vector<int>> arr){
    for(int i = 0;i < n ; ++i){
        for(int j = 0; j < i+1; ++j){
            printf("%5d",arr[i][j]);
        }
        printf("\n");
    }
}

void set(int n,vector<int> pre_row,int row){
    if(row == n){
        return;
    }
    vector<int>next_row;
    next_row.push_back(1);
    for(int i = 1; i < pre_row.size();++i){
        next_row.push_back(pre_row[i-1] + pre_row[i]);
    }
    next_row.push_back(1);
    arr.push_back(next_row);
    set(n, next_row, row+1);
}

int main() {
    int n;
    cin>>n;
    vector<int> pre_row;
    pre_row.push_back(1);
    arr.push_back(pre_row);
    set(n, pre_row,0);
    print(n,arr);

    return 0;
}


编辑于 2024-03-08 21:34:12 回复(0)
方式一
n = int(input())
a = []
for i in range(1,n+1):
    if i == 1:
        a.append([i])
    a.append([1,*[a[i-1][j-1]+a[i-1][j] for j in range(1,i)],1])
for i in a[:-1]:
    for j in i:
        print("{:>5d}".format(j),end="")
    print()
方式二
n=int(input())
a=[[0]*n for i in range(n)]

for i in range(n):
    for j in range(i+1):
        if j==0&nbs***bsp;j==i:
            a[i][j]=1
        else:
            a[i][j] = a[i-1][j-1] + a[i-1][j]

for i in a:
    for j in i:
        if j > 0:
            print("{:>5d}".format(j),end="")
    print()




发表于 2024-02-10 15:13:15 回复(0)
#include <stdio.h>

int main() {
    int n,a[31][31]={0},b=1;
    scanf("%d",&n);
    a[1][1]=1;
    int row=2,col=1;
    while(b++<n){
        for(int i=col;i<=b;i++)a[row][i]=a[row-1][i-1]+a[row-1][i];
        row++;
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=i;j++)printf("%5d",a[i][j]);
        printf("\n");
    }
    return 0;
}

发表于 2024-01-15 18:27:39 回复(0)
package main

import (
    "fmt"
)

func main() {
    var n int
    fmt.Scan(&n)

    arr := [30][30]int{}
    arr[1][1] = 1

    for i := 2; i <= n; i++ {
        for j := 1; j <= n; j++ {
            arr[i][j] = arr[i-1][j] + arr[i-1][j-1]
        }
    }

    for i := 1; i <= n; i++ {
        for j := 1; j <= i; j++ {
            fmt.Printf("%5d", arr[i][j])
        }
        fmt.Println()
    }
}
编辑于 2023-12-25 21:55:39 回复(0)
#include <stdio.h>

int main()
{
    int n;
    int arr[100][100];
    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 = 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++)
        {
            printf("%5d",arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}


编辑于 2023-12-09 15:52:04 回复(0)
#include <stdio.h>
int main()
{
    int n;
    scanf("%d ",&n);
    int arr[n][n];
    int i;
    for(i=0;i<n;i++)
    {
        int j;
        for(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];//正好是一个直角三角形
            }
            printf("%5d",arr[i][j]);//域宽为5
        }
        printf("\n");
    }
    return 0;
}

发表于 2023-11-13 09:56:38 回复(0)

问题信息

上传者:牛客309119号
难度:
96条回答 5293浏览

热门推荐

通过挑战的用户

查看代码