2019-04-29 22:34:40
问题描述:打印出如图所示三角形(打印十行)
中间的数据等于其上一行左上,右上的数据和,第i层有i列需要求解i个数据,可以用二维数组存储杨辉三角形。规律:第一列都为1,主对角线都为1,从第三行起,中间位置元素的值等于其上一行对应位置元素及其前一个元素之和,值就是从当前推到到下一行的递推式,从此可求出杨辉三角行的任意一行。
#include<stdio.h> void yanghui(){ int n,i,j,a[20]; printf(" 1 "); a[1]=a[2]=1; printf(" %-4d %-4d ",a[1],a[2]); //%-4d使输出空出4位来,-指左对齐 for(i=3;i<=10;i++) { a[1]=a[i]=1; for(j=i-1;j>1;j--) { a[j]=a[j]+a[j-1]; for(j=1;j<=i;j++) printf(" %-4d",a[j]); } printf(" "); } } int main()
{
yanghui();
}
这个代码的运行只体现了思想,并没有按照正三角形的形式输出。
改进版:
#include <stdio.h> #define N 10 int main() { int arr[N][N] = {0}; int i=0; for(i = 0; i<N; i++) { int m = 0; //定义m,使其输出空格,直角三角形变为正三角形 for(m = 0;m<N-i;m++) { printf(" "); } int j=0; for(j = 0;j<=i; j++) //i=0,j=0,j<=i,所以执行内层for循环,j=0或者i=j,a[i][j]=1,即a[0][0]=1。j++后j为1,跳出内层循环。 { i=1,j=0,a[1][0]=1;a[1]a[1]=1;跳出循环; if((0 == j)||(i == j)) i=2,j=0,a[2][0]=1;a[2][1]=a[1][1]+a[2][0]=1+1=2;a[2][2]=1;(i=j的情况) { arr[i][j] = 1; } else { arr[i][j] = arr[i-1][j] + arr[i-1][j-1]; } printf("%4d",arr[i][j]); //规定好距离,若为1,2,3下层数据会混合在一起,不易区分。 } printf(" "); } return 0; }