思路:1.定义变量;2.初始化首列和对角线上的元素;3.找规律计算元素值;4.输出;
方法一:数组
- #include <STDIO.H>//直角三角形;
- int main()
- {
- int i,j;//i:行,j:列;定义变量;
- int a[10][10];
- printf("\n");
- for(i=0;i<10;i++)//初始化
- {
- a[i][0]=1;//初始化每一行的首元素为1;
- a[i][i]=1;//初始化对角线上的元素为1;
- }
- for(i=2;i<10;i++)//实现杨辉三角各元素的计算;
- {
- for(j=1;j<i;j++)//不为:j<=i; 因为对角线上的元素全为1;
- {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("%4d",a[i][j]);}
- printf("\n");
- }
- return 0;
- }
方法二:递归(简单容易理解,执行效率偏低,适合较小的数值)
• #include<stdio.h>
• int c(int x,int y) /*求杨辉三角形中第x行第y列的值*/
• {
• int z;
• if((y==1)||(y==x+1))//(key point)x从0开始;
• {return 1;}//若为x行的第1列或第x+1列,则输出1;
• z=c(x-1,y-1)+c(x-1,y); //否则,其值为前一行中第y-1列与第y列值之和
• return z;
• }
•
• int main()
• {
• int i,j,n=14;//
• printf("N=");
• scanf("%d",&n);
• while(n>13)
• {
• scanf("%d",&n);
• }//控制输入正确的值以保证屏幕显示的图形正确
• for(i=0;i<=n;i++) //控制输出N行,若i=1;无顶尖的1;(差一行)
• {
• for(j=0;j<26-2*i;j++)//24等值亦可;等腰控制;
• {
• printf(" ");//控制输出第i行前面的空格;无空格则输出左直角;有1个空格等边;2个空格右直角;
• }
• for(j=1;j<=i+1;j++)//实际的行数和列数是相等的,有几行就有几列,因为行数i是从0开始的故有了j<=i+1;
• {
• printf("%5d",c(i,j));//输出第i行的第j个值,右对齐,占5位,即最小字段宽度为5;
• }
• printf("\n");
• }
• return 0;
• }
方法三:规律 k=k*(i-j)/j;
• #include<stdio.h>
• int main()
• {
• int i,j,n,k;
• printf("请输入杨辉三角形的行数:");
• scanf("%d",&n);//要输出的杨辉三角形的行数;
• for(i=1;i<=n;i++)//i:行数;或for(i=1;i<=n+1;i++)(输出多一行)
• {
• k=1;
• for(j=1;j<(24-2*i);j++)//24等值亦可;
• {
• printf(" ");//控制输出第i行前面的空格,无空格则输出左直角;有1个等边;两个右直角;
• } //实现等腰三角;
• for(j=1;j<i;j++)//j:列数; 不能是:j<=i;因为相等时:k=k*(i-j)/j;(等于0,无意义)
• {
• printf("%4d",k);//杨辉三角里面的元素值;
• k=k*(i-j)/j;//要打印的下一个数等于前一个数乘以其所在行数和列数的差再除以其列数
• }
• printf("%4d",k);//输出对角线上的全1;
• printf("\n");
• }
• return 0;
• }
之后的几种方法感觉没啥新意了,但还是列出来,供各位朋友参考:
方法四:杨辉三角形,是等腰三角形
• #include <stdio.h>
• void main(void)
• {
• static int array[10][10],i,j,k;
• for(i=0;i <10;i++)
• {
• array[i][i]=array[i][0]=1;
• for(j=1;j <=i;j++)
• array[i][j]=array[i-1][j]+array[i-1][j-1];
• }
• for(i=0;i <10;i++)
• {
• for(k=0;k <10-i;k++)
• printf( " "); /*三个空格*/
• for(j=0;j <=i;j++)
• {
• printf( "%3d ",array[i][j]);
• printf( " ");
• }
• printf( "\n ");
• }
• }
•
• 方法五:等腰杨辉三角
• #include <STDIO.H>
• #define P 10
• void main()
• {int a[P],r,c;
• for(r=0;r<=P;r++)
• {
• a[r]=1;
• for(c=r-1;c>=1;a[c--]+=a[c-1]);
• printf("%*d",(P-r)*3+1,a[0]);//%*d 跳过输入数据中的一个整型数;scanf("%*d %d %d",&j,&i);
• for(c=1;c<=r;printf("%6d",a[c++]));//输入 71 82 93;跳过第一个数 71,j=82,i=93;
• printf("\n");
• }
• getchar();
• }
方法六:• #include <iostream>
• #include <iomanip> // setw的头文件
• using namespace std; //省略std名称空间前缀
• int main()
• {
• int i,j,a[10][10];
• for(i=0;i<10;i++)
• {
• for(j=10;j>=i;j--)
• cout<<" ";/*两个空格*/
• 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];
• cout<<setw(3)<<a[i][j]<<" ";/*后一个空格*/
• if(i==j)
• cout<<endl;
• }
• }
• return 0;
• }
方法七:
• #include<iostream>
• #include<iomanip>
• using namespace std;
• #define t 11
• void main()
• {
• int i,j,k;
• int a[t][t];
• for(i=1;i<t;i++)
• {
• a[i][i]=1;
• a[i][1]=1;
• }
•
• for(i=3;i<t;i++)
• for(j=2;j<i;j++)
• a[i][j]=a[i-1][j]+a[i-1][j-1];
•
• for(i=1;i<t;i++)
• {
• for(k=1;k<3*(t-i);k++)
• cout<<' ';
• for(j=1;j<=i;j++)
• if(j==1)
• cout<<a[i][j];
• else
• cout<<setw(6)<<a[i][j];
• cout<<endl;
• }
• }
方法八:使用了一个一维数组和两个临时变量;
• #include <stdio.h>
• int main()
• {
• int i,j,n=0,a[17]={0,1},l,r;//i:行数;j:列数;n:输入的行数;
• while(n<1 || n>16)
• {
• printf("请输入杨辉三角形的行数:");
• scanf("%d",&n);
• }
• for(i=1;i<=n;i++)
• {
• l=0;
• for(j=1;j<=i;j++)
• {
• r=a[j];
• a[j]=l+r; /*每个数是上面两数之和*/
• l=r;
• printf("%5d",a[j]); /*输出杨辉三角*/
• }
• printf("\n");
• }
• return 0;
• }