qq_51352031
2021-07-21 15:55
采纳率: 85.7%
浏览 123

杨辉三角问题C语言,今天

杨辉,字谦光,汉族,钱塘(今浙江省杭州)人,南宋杰出的数学家。 他曾担任过南宋地方行政官员,为政清廉,足迹遍及苏杭一带。他在总结民间乘除捷算法、“垛积术”、纵横图(幻方)以及数学教育方面,均做出了重大的贡献。他是世界上第一个排出丰富的纵横图和讨论其构成规律的数学家。还曾论证过弧矢公式,时人称为“辉术”。与秦九韶、李冶、朱世杰并称“宋元数学四大家”。主要著有数学著作5种21卷,即《详解九章算法》12卷(1261),《日用算法》2卷(1262),《乘除通变本末》3卷(1274),《田亩比类乘除捷法》2卷(1275)和《续古摘奇算法》2卷(1275)(其中《详解》和《日用算法》已非完书)。后三种合称为《杨辉算法》。朝鲜、日本等国均有译本出版,流传世界。(来源于百度百科)

杨辉在《详解九章算法》一书中还画了一张表示二项式展开后的系数构成的三角图形,称做“开方做法本源”,简称为“杨辉三角”。杨辉三角是一个由数字排列成的三角形数表。(来源于百度百科)

输入一个整数n,输出n行的杨辉三角形。例如,n=5,则杨辉三角如输出样例所示。

输入格式:
输入数据有多组,每组1个整数n(1≤n≤10),一直处理到文件结束。

输出格式:
对于每个n,输出n行杨辉三角形。每个数据的输出为5个字符宽度,具体见输出样例。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • CSDN专家-link 2021-07-21 15:56
    已采纳
    #include <stdio.h>
    #include <stdlib.h>
    #define N 10
    void main()
    {
       while(1)
      {
       system("cls");
        int i, j, k, n=0, a[N][N];  /*定义二维数组a[10][10]*/
        printf("请输入要打印的行数(输入<=0时结束):");
        scanf("%d",&n);
        if(n<=0)
          return;
        if(n>10)
        {
          printf("行数不能大于10\n"):
          continue;
        }
        printf("%d行杨辉三角如下:\n",n);
        for(i=1;i<=n;i++)
            a[i][1] = a[i][i] = 1;  /*两边的数令它为1,因为现在循环从1开始,就认为a[i][1]为第一个数*/
        for(i=3;i<=n;i++)
            for(j=2;j<=i-1;j++)
                a[i][j]=a[i-1][j-1]+a[i-1][j];  /*除两边的数外都等于上两顶数之和*/ 
        for(i=1;i<=n;i++){
            for(k=1;k<=n-i;k++)
                printf("   ");  /*这一行主要是在输出数之前打上空格占位,让输出的数更美观*/
            for(j=1;j<=i;j++)  /*j<=i的原因是不输出其它的数,只输出我们想要的数*/
                printf("%5d",a[i][j]);
            
            printf("\n");  /*当一行输出完以后换行继续下一行的输出*/
        }
        system("pause");
      }
        printf("\n");
    }
    
    
    已采纳该答案
    打赏 评论
  • CSDN专家-Fay 2021-07-21 15:57

    这类代码有很多啊,参考一下:

    #include <stdio.h>
    #define N 14
    void main()
    {
        int i, j, k, n=0, a[N][N];  /*定义二维数组a[14][14]*/
        while(n<=0||n>=13){  /*控制打印的行数不要太大,过大会造成显示不规范*/
            printf("请输入要打印的行数:");
            scanf("%d",&n);
        }
        printf("%d行杨辉三角如下:\n",n);
        for(i=1;i<=n;i++)
            a[i][1] = a[i][i] = 1;  /*两边的数令它为1,因为现在循环从1开始,就认为a[i][1]为第一个数*/
        for(i=3;i<=n;i++)
            for(j=2;j<=i-1;j++)
                a[i][j]=a[i-1][j-1]+a[i-1][j];  /*除两边的数外都等于上两顶数之和*/ 
        for(i=1;i<=n;i++){
            for(k=1;k<=n-i;k++)
                printf("   ");  /*这一行主要是在输出数之前打上空格占位,让输出的数更美观*/
            for(j=1;j<=i;j++)  /*j<=i的原因是不输出其它的数,只输出我们想要的数*/
                printf("%6d",a[i][j]);
            
            printf("\n");  /*当一行输出完以后换行继续下一行的输出*/
        }
        printf("\n");
    }
    
    

    img

    打赏 评论

相关推荐 更多相似问题