C語言輸出楊輝三角
直角三角形楊輝三角
//c語言,求直角的
#include<stdio.h>
#defineM10
voidmain()
{
inta[M][M],i,j;
for(i=0;i<M;i++)
for(j=0;j<=i;j++)
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");
}
使用陣列列印金字塔型楊輝三角
inta[10][10],i,j;
for(i=0;i<10;i++)
for(j=10;j>=i;j--)
printf("%2c","");/*兩個空格*/
printf("%3d",a[i][j]);/*%3d後一個空格*/
if(i==j)
printf("\n");
不用陣列輸出金字塔形楊輝三角
#defineN10
unsignedinti,j,k;
unsignedintb,c;
for(i=0;i<N;i++)
for(j=N;j>i;j--)
printf("");
b=c=1;
if(j>=1)
for(k=i-j+1;k<=i;k++)
b*=k;
for(k=1;k<=j;k++)
c*=k;
printf("%4d",b/c);
註解:
在列印楊輝三角時通常用到楊輝三角的兩個性質。
第一個就是楊輝三角中除了最外層(不包括楊輝三角底邊)的數為1外,其餘的數都是它肩上兩個數之和。用陣列輸出楊輝三角就用這個性質。
第二個性質是楊輝三角的第n行恰好是C(n,0)~C(n,n)。這裡的C表示組合。不用陣列輸出楊輝三角就用這個性質。把楊輝三角的前15行儲存在文字檔案中 #include<stdio.h>
#include<stdlib.h>
#defineM15
FILE*out;
if((out=fopen("D:\\text_1.txt","w"))==NULL)
printf("Error!\n");
exit(0);
fprintf(out,"%5d",a[j]);
fputc("\n",out);
fclose(out);
用二維陣列輸出前十行:
intmain()
a[i][i]=1;
a[i][0]=1;
for(i=2;i<10;i++)
for(j=1;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
printf("%6d",a[i][j]);
return0;
編輯本段VB輸出楊輝三角
PrivateSubForm_click()
n=Val(Text1.Text)
ReDima(n+1,n+1),b(n+1,n+1)
Cls
k=8
Fori=1Ton
PrintString((n-i)*k/2+1,"");
Forj=1Toi
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)))
Printb(i,j);String(k-Len(b(i,j)),"");
Nextj
Print
Nexti
EndSub
建立一個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楊輝三角題目:
#definemaxn50
constinty=2009;
intn,c[maxn][maxn],i,j,s=0;
scanf("%d",&n);
c[0][0]=1;
for(i=1;i<=n;i++)
c[i][0]=1;
for(j=1;j<i;j++)
c[i][j]=c[i-1][j-1]+c[i-1][j];
c[i][i]=1;
for(i=0;i<=n;i++)
s=(s+c[n][i])%y;
printf("%d\n",s);
此為利用陣列求和
Java實現
程式碼:
publicclassYhuiTest{
publicstaticvoidmain(String[]args){
finalintRow=6;
intyh[][]=newint[Row][Row];
for(inti=0;i<Row;i++){
yh[i][0]=1;
yh[i][i]=1;
for(inti=2;i<Row;i++){
for(intj=1;j<Row;j++){
yh[i][j]=yh[i-1][j-1]+yh[i-1][j];
for(intj=0;j<=i;j++){
System.out.print(yh[i][j]+"");
System.out.println();
程式碼
結果:
C++輸出楊輝三角
//單陣列動態規劃輸出楊輝三角,以下截止第31行
#include<iostream>
usingnamespacestd;
#defineMAXH31
inti,j;
unsignedlongnum[MAXH]={0};
num[0]=1;
for(i=0;i<MAXH;i++)
for(j=i;j>0;j--)
num[j]=num[j]+num[j-1];//A[i,j]=A[i,j-1]+A[i,j]
cout<<num[j]<<"";
cout<<"1"<<endl;
陣列輸出楊輝三角
/*直角三角形*
inth,i,j;
cout<<"請輸入楊輝三角的高度:"<<endl;
cin>>h;
inta[10][10];
for(i=0;i<=h;i++)
cout<<a[i][j]<<"\t";
cout<<endl;
/*等腰三角形*
inti,j,h,a[10][10];
for(j=h;j>=i;j--)
cout<<"";
遞迴方法輸出直角楊輝三角
intcomputeTriangleElement(intlevel,intindex);
voidyanghuiTriangle(intlevel);
voidyanghuiTriangle(intlevel)
for(inti=1;i<=level;i++)
for(intj=1;j<=i;j++)
cout<<computeTriangleElement(i,j)<<"";
intcomputeTriangleElement(intlevel,intindex)
if(index==1||index==level)
return1;
returncomputeTriangleElement(level-1,index-1)+computeTriangleElement(level-1,index);
intlevel;
cin>>level;
yanghuiTriangle(level);
佇列輸出直角楊輝三角
#include<malloc.h>
#defineERROR0
#defineOK1
#defineOVERFLOW-1
#defineMAX_QUEUE100
typedefintDataType;
typedefstruct
DataTypeelem[MAX_QUEUE];
intfront;
intrear;
}LinkQueue;
intInitQueue(LinkQueue*);
voidEnQueue(LinkQueue*,DataType);
voidDeQueue(LinkQueue*,DataType*);
voidGetFront(LinkQueue,DataType*);
intQueueEmpty(LinkQueue);
voidYangHuiTriangle(int);
intn=1;
printf("pleaseenteranumber:");
if(n<=0)
printf("ERROR!\n");
YangHuiTriangle(n);
intInitQueue(LinkQueue*Q)
Q->front=Q->rear=-1;
voidEnQueue(LinkQueue*Q,DataTypee)
if((Q->rear+1)%MAX_QUEUE==Q->front)
exit(OVERFLOW);
Q->rear=(Q->rear+1)%MAX_QUEUE;
Q->elem[Q->rear]=e;
voidDeQueue(LinkQueue*Q,DataType*e)
if(QueueEmpty(*Q))
printf("queueisempty\n");
Q->front=(Q->front+1)%MAX_QUEUE;
*e=Q->elem[Q->front];
voidGetFront(LinkQueueQ,DataType*e)
if(QueueEmpty(Q))
*e=Q.elem[(Q.front+1)%MAX_QUEUE];
intQueueEmpty(LinkQueueQ)
if(Q.front==Q.rear)
voidYangHuiTriangle(intn)
LinkQueueQ;
inti,j,k,t,s,e;
InitQueue(&Q);
for(i=0;i<n;i++)
printf("1\n");
EnQueue(&Q,1);
for(i=1;i<n;i++)
for(k=0;k<n-i;k++)
for(j=0;j<i;j++)
DeQueue(&Q,&t);
printf("%3d",t);
GetFront(Q,&s);
e=t+s;
EnQueue(&Q,e);
printf("%d\n",t);
C語言輸出楊輝三角
直角三角形楊輝三角
//c語言,求直角的
#include<stdio.h>
#defineM10
voidmain()
{
inta[M][M],i,j;
for(i=0;i<M;i++)
for(j=0;j<=i;j++)
{
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>
voidmain()
{
inta[10][10],i,j;
for(i=0;i<10;i++)
{
for(j=10;j>=i;j--)
printf("%2c","");/*兩個空格*/
for(j=0;j<=i;j++)
{
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>
#defineN10
voidmain()
{
unsignedinti,j,k;
unsignedintb,c;
for(i=0;i<N;i++)
{
for(j=N;j>i;j--)
printf("");
for(j=0;j<=i;j++)
{
b=c=1;
if(j>=1)
{
for(k=i-j+1;k<=i;k++)
b*=k;
for(k=1;k<=j;k++)
c*=k;
}
printf("%4d",b/c);
}
printf("\n");
}
}
註解:
在列印楊輝三角時通常用到楊輝三角的兩個性質。
第一個就是楊輝三角中除了最外層(不包括楊輝三角底邊)的數為1外,其餘的數都是它肩上兩個數之和。用陣列輸出楊輝三角就用這個性質。
第二個性質是楊輝三角的第n行恰好是C(n,0)~C(n,n)。這裡的C表示組合。不用陣列輸出楊輝三角就用這個性質。把楊輝三角的前15行儲存在文字檔案中 #include<stdio.h>
#include<stdlib.h>
#defineM15
voidmain()
{
FILE*out;
if((out=fopen("D:\\text_1.txt","w"))==NULL)
{
printf("Error!\n");
exit(0);
}
inta[M][M],i,j;
for(i=0;i<M;i++)
for(j=0;j<=i;j++)
{
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>
intmain()
{
inta[10][10],i,j;
for(i=0;i<10;i++)
{
a[i][i]=1;
a[i][0]=1;
}
for(i=2;i<10;i++)
for(j=1;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<10;i++)
{
for(j=0;j<=i;j++)
printf("%6d",a[i][j]);
printf("\n");
}
printf("\n");
return0;
}
編輯本段VB輸出楊輝三角
PrivateSubForm_click()
n=Val(Text1.Text)
ReDima(n+1,n+1),b(n+1,n+1)
Cls
k=8
Fori=1Ton
PrintString((n-i)*k/2+1,"");
Forj=1Toi
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)))
Printb(i,j);String(k-Len(b(i,j)),"");
Nextj
Print
Nexti
EndSub
建立一個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>
#definemaxn50
constinty=2009;
intmain()
{
intn,c[maxn][maxn],i,j,s=0;
scanf("%d",&n);
c[0][0]=1;
for(i=1;i<=n;i++)
{
c[i][0]=1;
for(j=1;j<i;j++)
c[i][j]=c[i-1][j-1]+c[i-1][j];
c[i][i]=1;
}
for(i=0;i<=n;i++)
s=(s+c[n][i])%y;
printf("%d\n",s);
return0;
此為利用陣列求和
Java實現
程式碼:
publicclassYhuiTest{
publicstaticvoidmain(String[]args){
finalintRow=6;
intyh[][]=newint[Row][Row];
for(inti=0;i<Row;i++){
yh[i][0]=1;
yh[i][i]=1;
}
for(inti=2;i<Row;i++){
for(intj=1;j<Row;j++){
yh[i][j]=yh[i-1][j-1]+yh[i-1][j];
}
}
for(inti=0;i<Row;i++){
for(intj=0;j<=i;j++){
System.out.print(yh[i][j]+"");
}
System.out.println();
}
}
}
程式碼
結果:
C++輸出楊輝三角
//單陣列動態規劃輸出楊輝三角,以下截止第31行
#include<iostream>
usingnamespacestd;
#defineMAXH31
intmain()
{
inti,j;
unsignedlongnum[MAXH]={0};
num[0]=1;
for(i=0;i<MAXH;i++)
{
for(j=i;j>0;j--)
{
num[j]=num[j]+num[j-1];//A[i,j]=A[i,j-1]+A[i,j]
cout<<num[j]<<"";
}
cout<<"1"<<endl;
}
return0;
}
陣列輸出楊輝三角
/*直角三角形*
#include<iostream>
usingnamespacestd;
intmain()
{
inth,i,j;
cout<<"請輸入楊輝三角的高度:"<<endl;
cin>>h;
inta[10][10];
for(i=0;i<10;i++)
{
a[i][i]=1;
a[i][0]=1;
}
for(i=2;i<10;i++)
for(j=1;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=0;i<=h;i++)
{
for(j=0;j<=i;j++)
cout<<a[i][j]<<"\t";
cout<<endl;
}
return0;
}
/*等腰三角形*
#include<iostream>
usingnamespacestd;
intmain()
{
inti,j,h,a[10][10];
cout<<"請輸入楊輝三角的高度:"<<endl;
cin>>h;
for(i=0;i<=h;i++)
{
for(j=0;j<=i;j++)
{
if(i==j||j==0)
a[i][j]=1;
else
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
}
for(i=0;i<=h;i++)
{
for(j=h;j>=i;j--)
cout<<"";
for(j=0;j<=i;j++)
{
cout<<a[i][j]<<"\t";
if(i==j)
cout<<endl;
}
}
return0;
}
遞迴方法輸出直角楊輝三角
#include<iostream>
usingnamespacestd;
intcomputeTriangleElement(intlevel,intindex);
voidyanghuiTriangle(intlevel);
voidyanghuiTriangle(intlevel)
{
for(inti=1;i<=level;i++)
{
for(intj=1;j<=i;j++)
{
cout<<computeTriangleElement(i,j)<<"";
}
cout<<endl;
}
}
intcomputeTriangleElement(intlevel,intindex)
{
if(index==1||index==level)
return1;
returncomputeTriangleElement(level-1,index-1)+computeTriangleElement(level-1,index);
}
intmain()
{
intlevel;
cout<<"請輸入楊輝三角的高度:"<<endl;
cin>>level;
yanghuiTriangle(level);
return0;
}
佇列輸出直角楊輝三角
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#defineERROR0
#defineOK1
#defineOVERFLOW-1
#defineMAX_QUEUE100
typedefintDataType;
typedefstruct
{
DataTypeelem[MAX_QUEUE];
intfront;
intrear;
}LinkQueue;
intInitQueue(LinkQueue*);
voidEnQueue(LinkQueue*,DataType);
voidDeQueue(LinkQueue*,DataType*);
voidGetFront(LinkQueue,DataType*);
intQueueEmpty(LinkQueue);
voidYangHuiTriangle(int);
intmain()
{
intn=1;
printf("pleaseenteranumber:");
scanf("%d",&n);
if(n<=0)
{
printf("ERROR!\n");
exit(0);
}
YangHuiTriangle(n);
return0;
}
intInitQueue(LinkQueue*Q)
{
Q->front=Q->rear=-1;
return1;
}
voidEnQueue(LinkQueue*Q,DataTypee)
{
if((Q->rear+1)%MAX_QUEUE==Q->front)
exit(OVERFLOW);
else
{
Q->rear=(Q->rear+1)%MAX_QUEUE;
Q->elem[Q->rear]=e;
}
}
voidDeQueue(LinkQueue*Q,DataType*e)
{
if(QueueEmpty(*Q))
{
printf("queueisempty\n");
exit(0);
}
else
{
Q->front=(Q->front+1)%MAX_QUEUE;
*e=Q->elem[Q->front];
}
}
voidGetFront(LinkQueueQ,DataType*e)
{
if(QueueEmpty(Q))
{
printf("queueisempty\n");
exit(0);
}
else
*e=Q.elem[(Q.front+1)%MAX_QUEUE];
}
intQueueEmpty(LinkQueueQ)
{
if(Q.front==Q.rear)
return1;
else
return0;
}
voidYangHuiTriangle(intn)
{
LinkQueueQ;
inti,j,k,t,s,e;
InitQueue(&Q);
for(i=0;i<n;i++)
printf("");
printf("1\n");
EnQueue(&Q,1);
EnQueue(&Q,1);
for(i=1;i<n;i++)
{
for(k=0;k<n-i;k++)
printf("");
EnQueue(&Q,1);
for(j=0;j<i;j++)
{
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);
}
}