说明:1.本问题来源于《C语言经典、趣味、实用程序设计编程百例精解》,所有程序为本人自己编写。与原程序不同之处作有标记。

2.本系列所有程序均使用codeblocks编译,操作系统为Windows XP。

问题:在屏幕上显示杨辉三角

1

1  1

1   2  1

1   3   3  1

1  4   6   4  1

1  5  10 10  5  1

………………………………

分析:我以图形的特点出发,设计两个数组,循环输出,代码如下。

#include <stdio.h>
#include <stdlib.h> int main(void)
{
int i=, j=;
int a[]={}, b[]={};
a[]=;
int rows=; printf("Please input rows: ");
scanf("%d", &rows); //控制输出多少行 for(i=; i<=rows; i++)
{
for(j=; j<rows-i; j++) //控制输出每行前的空格
{
printf(" ");
} for(j=; j<rows; j++)//将数组a复制给数组b
{
b[j] = a[j];
} for(j=; j<=i-; j++) //通过数组b给下一行赋值
{
a[j] = b[j-] + b[j];
} for(j=; j<rows; j++) //输出新一行数组a
{
if(a[j]!=)
printf("%4d", a[j]);
} printf("\n");
} return ;
}

输出情况如下:

图1

原书分析如下:

杨辉三角中的数,正是(x+y)的N次幂展开式的各项的系数。从杨辉三角的特点出发,可以总结出:

1)第N行有N+1个值(设起始行为0行);

2)对于第N行的第J个值:(N>=2);

当J=1时或J=N+1时:其值为1;

J!=1且J!=N+1时:其值为第N-1行的第J-1个值和第J个值的和。

将如上特点提炼成数学公式可表示为:

1  x=1或x=N+1

c(x,y)=c(x-1,y-1)+c(x-1,y)

#include <stdio.h>
#include <stdlib.h> int YangHui(int x,int y); int main(void)
{
int i, j, n=;
printf("N=");
while(n>)
scanf("%d", &n); //控制输入正确的值以保证屏幕显示的图形正确 for(i=; i<=n; i++) //控制输出N行
{
for(j=; j<-*i; j++)
printf(" "); //控制输出第i行前的空格 for(j=; j<i+; j++)
printf("%4d", YangHui(i, j)); //输出第i行的第j个值 printf("\n");
} return ;
} int YangHui(int x, int y)
{
int z;
if((y==)||(y==x+))
return ; z=YangHui(x-,y-)+YangHui(x-, y);
return z;
}

输出情况如下:

图2

趣味C程序100.9 绘制杨辉三角的更多相关文章

  1. 经典问题(c++/python)素数、杨辉三角(金字塔型)、统计单词数、简单计算器、密码安全程度、凯撒密码加密、汉诺塔 (python课设实验实例)-- biaobiao88

    [编写程序,输人一个大于2的自然数,然后输出小于该数字的所有素数组成的列表.]所谓素数,是指除了1和自身之外没有其他因数的自然数,最小的素数是2,后面依次是3.5.7.11.13... c++代码: ...

  2. JAVA 基础编程练习题33 【程序 33 杨辉三角】

    33 [程序 33 杨辉三角] 题目:打印出杨辉三角形(要求打印出 10 行如下图) 程序分析: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 package ...

  3. C语言小程序(四)、杨辉三角

    输入要显示的杨辉三角的行数,会打印出金字塔型的杨辉三角,不过行数太多的话,效果不太好,可以再调整一下格式控制. #include <stdio.h> #include <stdlib ...

  4. python 生成器生成杨辉三角

    用Python写趣味程序感觉屌屌的,停不下来 #生成器生成展示杨辉三角 #原理是在一个2维数组里展示杨辉三角,空的地方用0,输出时,转化为' ' def yang(line): n,leng=0,2* ...

  5. java实现组合数_n!_杨辉三角_组合数递推公式_回文数_汉诺塔问题

    一,使用计算机计算组合数 1,设计思想 (1)使用组合数公式利用n!来计算Cn^k=n!/k!(n-k)!用递推计算阶乘 (2)使用递推的方法用杨辉三角计算Cn+1^k=Cn^k-1+Cn^k 通过数 ...

  6. java基础:进制详细介绍,进制快速转换,二维数组详解,循环嵌套应用,杨辉三角实现正倒直角正倒等腰三角,附练习案列

    1.Debug模式 1.1 什么是Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序. 1.2 Debug介绍与操作流程 如何加断点 选择 ...

  7. [LeetCode] Pascal's Triangle II 杨辉三角之二

    Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3, ...

  8. POJ2167Irrelevant Elements[唯一分解定理 组合数 杨辉三角]

    Irrelevant Elements Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 2407   Accepted: 59 ...

  9. HDNOIP201405杨辉三角

    2016.1.27 试题描述 杨辉三角是形如如下的数字三角形: 1 1    1 1   2    1 …… 现在想求出杨辉三角第N行的N个数中,有多少个数能被给定的质数p整除. 输入 一行两个空格隔 ...

随机推荐

  1. 保持Service不被Kill掉的方法--双Service守护 && Android实现双进程守护

    本文分为两个部分,第一部分为双Service守护,第二部分为双进程守护 第一部分: 一.Service简介:Java.lang.Object ↳Android.content.Context  ↳an ...

  2. 使用QEMU创建虚拟机

    下载安装: wget http://wiki.qemu-project.org/download/qemu-2.0.0.tar.bz2 tar xjvf qemu- ./configure --ena ...

  3. show()与showDialog()的区别

    A.WinForm中窗体显示  显示窗体可以有以下2种方法:  Form.ShowDialog方法 (窗体显示为模式窗体) Form.Show方法 (窗体显示为无模式窗体) 2者具体区别如下: 1.在 ...

  4. Linux学习笔记总结--ssh认证登录

    原理简介 SSH证书认证登录的基础是一对唯一匹配密钥: 私钥(private key)和公钥(public key).公钥用于对数据进行加密,而且只能用于加密.而私钥只能对使用所匹配的公钥,所加密过的 ...

  5. Linux下搭建Oracle11g RAC(3)----创建用户及配置相关文件

    配置11gR2 RAC需要安装Oracle Grid Infrastructure软件.Oracle数据库软件,其中Grid软件等同于Oracle 10g的Clusterware集群件.Oracle建 ...

  6. Android(java)学习笔记183:判断SD卡状态和存储空间大小

    当我们在使用SD卡时候,如果我们想往SD卡里读写数据,我们必须在这之前进行一个逻辑判断,那就是判断SD卡状态和SD存储空间大小: 核心代码: String status = Environment.g ...

  7. 加密算法 DES 3DES RSA AES 简介

    数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为[密文],使其只能在输入相应的[密钥]之后才能显示出本来内容,通过这样的途径来达到保护数据不被非法人 ...

  8. 各种SQL类型

    一.SQL:通常我们说的sql指的是最古老运用最方法的结构化查询语言(Structured Query Language),大部分人接触最多的是数据库查询使用,关系型数据库基本都支持. 二.T-SQL ...

  9. vsftpd安装指南

    如果您用的是Fedora 或Redhat 系统,可以用下面的命令在线安装: [root@localhost ~]# yum install vsftpd 如果是debian 类系统,可以用apt 来在 ...

  10. SQL打印全年日历

    数据库环境:SQL SERVER 2008R2 我之前有写过打印本月日历的SQL,里头有详细的说明.具体请参考前面的博文——生成本月日历. 全年日历只是在本月日历的基础上加了月信息,并按月份分组求得. ...