在java中用二维数组构造并打印一个有N行的杨辉三角,N由命令行输入如一个有6行的杨辉三角

Python021

在java中用二维数组构造并打印一个有N行的杨辉三角,N由命令行输入如一个有6行的杨辉三角,第1张

import java.util.Scanner

public class YTriangular {

public void run(int num) {

if (num <3) {

main(null)

}

int[][] yt = new int[num][num]

for (int i = 0i <numi++) {

for (int j = 0j <ij++) {

if (i == j || j == 0) {

yt[i][j] = 1

} else {

yt[i][j] = yt[i - 1][j - 1] + yt[i - 1][j]

}

System.out.print(yt[i][j] + " ")

}

System.out.println("")

}

}

public static void main(String[] args) {

System.out.println("请输入行数(>=3)")

Scanner scan = new Scanner(System.in)

int num = scan.nextInt()

new YTriangular().run(num)

}

}

//打印杨辉三角

/*1

1 1

1 2 1

1 3 3 1

*/

public class Test9 {

public static void main(String args[]){

int i = 10 // 控制行数

int yh[][] =new int[i][i] //创建数组

/* 不多做解释我也是新手 我就这么找规律

* yh[0][0]=1 // 第一行

yh[1][0]=1

yh[1][1]=1 //第二行

yh[2][0]=1

yh[2][2]=1 //第三行

yh[2][1]=yh[2-1][1-1]+yh[2-1][1]// 第三行的2

yh[3][1]=yh[3-1][1-1]+yh[3-1][1]//第四行的第一个3

yh[3][2]=yh[3-1][2-1]+yh[3-1][2]//第四行的第二个3

*/

for(int j=0j<ij++){ //因为两个边都是1 所以先给两边赋值

yh[j][0]=1

yh[j][j]=1

}

for(int j=2j<ij++){//根据公式 算出杨辉三角的特性 并赋值

for(int n=1n<jn++){

yh[j][n]=yh[j-1][n-1]+yh[j-1][n]

}

}

for(int j=0j<ij++){ //输出 杨辉三角

for(int n=0n<=jn++){

System.out.print(yh[j][n]+" ")

}

System.out.println()

}

}

}

C语言输出杨辉三角

直角角形杨辉三角

//c语言,求直角

#include<stdio.h>

#define M 10

void main()

{

int a[M][M], i , j

for(i=0i<Mi++)

for(j=0j<=ij++)

{

if(i==j||j==0)

a[i][j]=1

else

a[i][j]=a[i-1][j]+a[i-1][j-1]

printf("%d",a[i][j])

if(i==j)printf("\n")

}

}

使用数组打印金字塔型杨辉三角

#include<stdio.h>

void main()

{

int a[10][10],i,j

for(i=0i<10i++)

{

for(j=10j>=ij--)

printf("%2c",' ')/*两个空格*/

for(j=0j<=ij++)

{

if(i==j||j==0)

a[i][j]=1

else

a[i][j]=a[i-1][j]+a[i-1][j-1]

printf("%3d ",a[i][j])/*%3d后一个空格*/

if(i==j)

printf("\n")

}

}

}

不用数组输出金字塔形杨辉三角

#include<stdio.h>

#define N 10

void main()

{

unsigned int i,j,k

unsigned int b,c

for(i=0i<Ni++)

{

for(j=Nj>ij--)

printf("")

for(j=0j<=ij++)

{

b=c=1

if(j>=1)

{

for(k=i-j+1k<=ik++)

b*=k

for(k=1k<=jk++)

c*=k

}

printf("%4d",b/c)

}

printf("\n")

}

}

注解:

在打印杨辉三角时通常用到杨辉三角的两个性质。

第一个就是杨辉三角中除了最外层(不包括杨辉三角底边)的数为1外,其余的数都是它肩上两个数之和。用数组输出杨辉三角就用这个性质。

第二个性质是杨辉三角的第n行恰好是C(n,0)~C(n,n)。这里的C表示组合。不用数组输出杨辉三角就用这个性质。把杨辉三角的前15行保存在文本文件中 #include<stdio.h>

#include<stdlib.h>

#define M 15

void main()

{

FILE *out

if((out=fopen("D:\\text_1.txt","w"))==NULL)

{

printf("Error!\n")

exit(0)

}

int a[M][M],i,j

for(i=0i<Mi++)

for(j=0j<=ij++)

{

if(i==j||j==0)

a[i][j]=1

else

a[i][j]=a[i-1][j]+a[i-1][j-1]

fprintf(out,"%5d",a[j])

if(i==j)

fputc('\n',out)

}

fclose(out)

}

用二维数组输出前十行:

#include <stdio.h>

int main ()

{

int a[10][10],i,j

for(i=0i<10i++)

{

a[i][i]=1

a[i][0]=1

}

for (i=2i<10i++)

for (j=1j<=i-1j++)

a[i][j]=a[i-1][j-1]+a[i-1][j]

for(i=0i<10i++)

{

for (j=0j<=ij++)

printf("%6d",a[i][j])

printf("\n")

}

printf("\n")

return 0

}

编辑本段VB输出杨辉三角

Private Sub Form_click()

n = Val(Text1.Text)

ReDim a(n + 1, n + 1), b(n + 1, n + 1)

Cls

k = 8

For i = 1 To n

Print String((n - i) * k / 2 + 1, " ")

For j = 1 To i

a(i, 1) = 1

a(i, i) = 1

a(i + 1, j + 1) = a(i, j) + a(i, j + 1)

b(i, j) = Trim(Str(a(i, j)))

Print b(i, j)String(k - Len(b(i, j)), " ")

Next j

Print

Next i

End Sub

创建一个text和command,在text中输入所需行数,点击command即可。一个数在杨辉三角出现的次数 由1开始,正整数在杨辉三角形出现的次数为∞:1, 2, 2, 2, 3, 2, 2, 2, 4, 2, 2, 2, 2, 4, ... (OEIS:A003016)。最小而又大于1的数在贾宪三角形至少出现n次的数为2, 3, 6, 10, 120, 120, 3003, 3003, ... (OEIS:A062527)

除了1之外,所有正整数都出现有限次。

只有2出现刚好一次。

6,20,70等出现三次。

出现两次和四次的数很多。

还未能找到出现刚好五次的数。

120,210,1540等出现刚好六次。(OEIS:A098565)

因为丢番图方程

有无穷个解,所以出现至少六次的数有无穷个多。

其解答,是

其中Fn表示第n个斐波那契数(F1 = F2 = 1)。

3003是第一个出现八次的数。

一道NOIP杨辉三角题目:

#include<stdio.h>

#define maxn 50

const int y=2009

int main()

{

int n,c[maxn][maxn],i,j,s=0

scanf("%d",&n)

c[0][0]=1

for(i=1i<=ni++)

{

c[i][0]=1

for(j=1j<ij++)

c[i][j]=c[i-1][j-1]+c[i-1][j]

c[i][i]=1

}

for(i=0i<=ni++)

s=(s+c[n][i])%y

printf("%d\n",s)

return 0

此为利用数组求和

Java实现

代码:

public class YhuiTest {

public static void main(String[] args) {

final int Row = 6

int yh[][] = new int[Row][Row]

for (int i = 0i <Rowi++) {

yh[i][0] = 1

yh[i][i] = 1

}

for (int i = 2i <Rowi++) {

for (int j = 1j <Rowj++) {

yh[i][j] = yh[i - 1][j - 1] + yh[i - 1][j]

}

}

for (int i = 0i <Rowi++) {

for (int j = 0j <= ij++) {

System.out.print(yh[i][j] + " ")

}

System.out.println()

}

}

}

代码

结果:

C++输出杨辉三角

//单数组动态规划输出杨辉三角,以下截止第31行

#include <iostream>

using namespace std

#define MAXH 31

int main()

{

int i,j

unsigned long num[MAXH]={0}

num[0] = 1

for(i = 0i <MAXHi++)

{

for(j = ij >0j--)

{

num[j] = num[j] + num[j - 1]//A[i,j]=A[i,j-1]+A[i,j]

cout<<num[j]<<" "

}

cout<<"1"<<endl

}

return 0

}

数组输出杨辉三角

/*直角三角形*

#include<iostream>

using namespace std

int main()

{

int h,i,j

cout<<"请输入杨辉三角的高度:"<<endl

cin>>h

int a[10][10]

for(i=0i<10i++)

{

a[i][i]=1

a[i][0]=1

}

for(i=2i<10i++)

for(j=1j<=i-1j++)

a[i][j]=a[i-1][j-1]+a[i-1][j]

for(i=0i<=hi++)

{

for(j=0j<=ij++)

cout<<a[i][j]<<'\t'

cout<<endl

}

return 0

}

/*等腰三角形*

#include<iostream>

using namespace std

int main()

{

int i,j,h,a[10][10]

cout<<"请输入杨辉三角的高度:"<<endl

cin>>h

for(i=0i<=hi++)

{

for(j=0j<=ij++)

{

if(i==j||j==0)

a[i][j]=1

else

a[i][j]=a[i-1][j]+a[i-1][j-1]

}

}

for(i=0i<=hi++)

{

for(j=hj>=ij--)

cout<<" "

for(j=0j<=ij++)

{

cout<<a[i][j]<<'\t'

if(i==j)

cout<<endl

}

}

return 0

}

递归方法输出直角杨辉三角

#include<iostream>

using namespace std

int computeTriangleElement(int level,int index)

void yanghuiTriangle(int level)

void yanghuiTriangle(int level)

{

for(int i=1i<=leveli++)

{

for(int j=1j<=ij++)

{

cout<<computeTriangleElement(i,j)<<' '

}

cout<<endl

}

}

int computeTriangleElement(int level,int index)

{

if(index==1||index==level)

return 1

return computeTriangleElement(level-1,index-1)+computeTriangleElement(level-1,index)

}

int main()

{

int level

cout<<"请输入杨辉三角的高度:"<<endl

cin>>level

yanghuiTriangle(level)

return 0

}

队列输出直角杨辉三角

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

#define ERROR 0

#define OK 1

#define OVERFLOW -1

#define MAX_QUEUE 100

typedef int DataType

typedef struct

{

DataType elem[MAX_QUEUE]

int front

int rear

}LinkQueue

int InitQueue(LinkQueue *)

void EnQueue(LinkQueue *,DataType)

void DeQueue(LinkQueue *,DataType *)

void GetFront(LinkQueue,DataType *)

int QueueEmpty(LinkQueue)

void YangHuiTriangle(int )

int main()

{

int n=1

printf("please enter a number: ")

scanf("%d",&n)

if(n<=0)

{

printf("ERROR!\n")

exit(0)

}

YangHuiTriangle(n)

return 0

}

int InitQueue(LinkQueue *Q)

{

Q->front=Q->rear=-1

return 1

}

void EnQueue(LinkQueue *Q,DataType e)

{

if((Q->rear+1)%MAX_QUEUE==Q->front)

exit(OVERFLOW)

else

{

Q->rear=(Q->rear+1)%MAX_QUEUE

Q->elem[Q->rear]=e

}

}

void DeQueue(LinkQueue *Q,DataType *e)

{

if(QueueEmpty(*Q))

{

printf("queue is empty\n")

exit(0)

}

else

{

Q->front=(Q->front+1)%MAX_QUEUE

*e=Q->elem[Q->front]

}

}

void GetFront(LinkQueue Q,DataType *e)

{

if(QueueEmpty(Q))

{

printf("queue is empty\n")

exit(0)

}

else

*e=Q.elem[(Q.front+1)%MAX_QUEUE]

}

int QueueEmpty(LinkQueue Q)

{

if(Q.front==Q.rear)

return 1

else

return 0

}

void YangHuiTriangle(int n)

{

LinkQueue Q

int i,j,k,t,s,e

InitQueue(&Q)

for(i=0i<ni++)

printf(" ")

printf(" 1\n")

EnQueue(&Q,1)

EnQueue(&Q,1)

for(i=1i<ni++)

{

for(k=0k<n-ik++)

printf(" ")

EnQueue(&Q,1)

for(j=0j<ij++)

{

DeQueue(&Q,&t)

printf(" %3d ",t)

GetFront(Q,&s)

e=t+s

EnQueue(&Q,e)

}

EnQueue(&Q,1)

DeQueue(&Q,&t)

printf(" %d\n",t)

}

}