Java
逐步思想:
1.首先生成一个n行n列的0,两个for循环
package com.jingfei.csdn;
import java.util.Scanner;
public class YangHui {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数:");
int n = scanner.nextInt();
int [][] arr = new int[n][n];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}
2.每行递增出现,不需要整行都出现
只需要将内部的for循环的范围改为<=i
package com.jingfei.csdn;
import java.util.Scanner;
public class YangHui {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数:");
int n = scanner.nextInt();
int [][] arr = new int[n][n];
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j <=i; j++) {
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}
3.将前后全部填1.
package com.jingfei.csdn;
import java.util.Scanner;
public class YangHui {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数:");
int n = scanner.nextInt();
int [][] arr = new int[n][n];
for (int i = 0; i < arr.length; i++) {
arr[i][0]=1;
arr[i][i]=1;
for (int j = 0; j <=i; j++) {
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}
4.实现中间相加
从索引第2行,索引第1列开始,每一个元素值为上一行的前一列与当前列的和.
package com.jingfei.csdn;
import java.util.Scanner;
public class YangHui {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数:");
int n = scanner.nextInt();
int [][] arr = new int[n][n];
for (int i = 0; i < arr.length; i++) {
arr[i][0]=1;
arr[i][i]=1;
/*for (int j = 0; j <=i; j++) {
System.out.print(arr[i][j]+"\t");
}
System.out.println();*/
}
for (int i = 2; i < arr.length; i++) {
for (int j = 1; j <= i; j++) {
arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
}
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j <= i; j++) {
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}
package com.jingfei.csdn;
import java.util.Scanner;
public class YangHui {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数:");
int n = scanner.nextInt();
int [][] arr = new int[n][n];
for (int i = 0; i < arr.length; i++) {
arr[i][0]=1;
arr[i][i]=1;
/*for (int j = 0; j <=i; j++) {
System.out.print(arr[i][j]+"\t");
}
System.out.println();*/
}
for (int i = 2; i < arr.length; i++) {
for (int j = 1; j <= i; j++) {
arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
}
}
for (int i = 0; i < arr.length; i++) {
for (int s = i; s < arr.length; s++) {
System.out.print(" ");//空格,为了好看.
}
for (int j = 0; j <= i; j++) {
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}
}
递归
一.
public static int digui(int i,int j)
{
if(j==0||j==i)
return 1;
else
return digui(i-1,j)+digui(i-1,j-1);
}
public static void main(String args[])
{
int tri[][];
tri=new int[10][10];
for(int i=0;i<10;i++)
for(int j=0;j<=i;j++)
tri[i][j]=digui(i,j);
for(int i=0;i<10;i++)
{
System.out.println();
for(int n=10-i;n>=1;n--)
System.out.print(" ");
for(int j=0;j<=i;j++)
System.out.print(tri[i][j]+" ");
}
}
}
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
二.
package com.jingfei.csdn;
public class Yanghui {
public static void main(String[] args) {
int[][] arr = new int[10][];
for (int i = 0; i < arr.length; i++) {
arr[i] = new int[i+1];
}
//{{1}{1,1}{1,2,1}{1,3,3,1}}
for (int i = 0; i < arr.length; i++) {
arr[i][0]=1;
arr[i][i]=1;
for (int j = 1; j < i; j++) {
arr[i][j] = arr[i-1][j-1]+arr[i-1][j];
}
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j]+"\t");
}
System.out.println();
}
}
}
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
三.
package com.jingfei.csdn;
public class YangHuiSanJiao {
public static void main(String args[])
{
int x=10;//输入几层是几层
int num[][] = new int[x][x];//这个数组有几层
for(int m=0;m<x;m++)//主要是对数组进行赋值
{
for(int n=0;n<=m;n++)//每一层的个数都是小于等于层数的,m代表层数,n代表着第几个数
{
if(n==0||m==n)//每一层的开头都是1,m==n的时候也是1,必须要这个,凡事都得有个开头
{
num[m][n]=1;
}
else
num[m][n]=num[m-1][n-1]+num[m-1][n];//这个就是递推的方法了,例如3=1+2,3的坐标就是3[3,1]=1[2,0]+2[2,1];
}
}
for(int i=0;i<x;i++)//主要是输出数组
{
for(int l=i;l<x;l++)//这个主要是打空格,好看一点,去掉就是直角三角形了
{
System.out.print(" ");
}
for(int j=x-i;j<=x;j++)//这个就是打印数组了,每层循环几次就几个
{
System.out.print(num[i][x-j]+" ");//不懂的可以把x替换成10,更加清楚点
}
System.out.println();//每层换行
}
}
}
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
python
# -*- coding: utf-8 -*-
def triangles():
N=[1]
while True:
yield N #generator函数与普通函数的差别:在执行过程中,遇到yield就中断,下次又继续执行
N.append(0)
N=[N[i-1] + N[i] for i in range(len(N))] #写法
if __name__ == '__main__':
n=0
for t in triangles():
print(t)
n=n+1
if n == 10:
break
#计算杨辉三角 普通法
triangle = [[1],[1,1]]
n = 8
for i in range(2,n):
swap = triangle[-1]
cul = [1]
for j in range(len(swap)-1):
cul.append(swap[j] + swap[j+1])
cul.append(1)
triangle.append(cul)
print(triangle)
#计算杨辉三角 补0法/在每行末尾补零
tra = [[1]]
for i in range(1,6):
swap = tra[i-1]+[0]
cul = list()
for j in range(i+1):
cul.append(swap[j-1]+swap[j])
tra.append(cul)
tra
#计算杨辉三角 补0法
triangle = [[1]]
n = 7
for i in range(1,n):
swap = triangle[i-1]+[0]
cul = [1]
for j in range(len(swap)-1):
cul.append(swap[j]+swap[j+1])
triangle.append(cul)
print(triangle)
---------------------------------------------------------------------------------------
谢谢