精华内容
下载资源
问答
  • 打印杨辉三角

    2017-03-22 19:45:37
    利用二维数组打印杨辉三角
  • 数组打印杨辉三角与队列打印杨辉三角数组打印杨辉三角与队列打印杨辉三角杨辉三角的例图:数学规律为:1、每一行的第一个数和最后一个数均为12、第 i 行第 j 列的数 = 第 (i-1) 行 (j-1) 列的数+第(i-1)第 j 列的数...

    数组打印杨辉三角与队列打印杨辉三角

    数组打印杨辉三角与队列打印杨辉三角

    杨辉三角的例图:

    d69bc595d8006161429f70195e211d21.png

    数学规律为:

    1、每一行的第一个数和最后一个数均为1

    2、第 i 行第 j 列的数 = 第 (i-1) 行 (j-1) 列的数+第(i-1)第 j 列的数

    首先来看一看如何用数组的方式打印杨辉三角:

    #include

    void yanghuitiangle(int n)

    {

    int a[100][100];

    for(int i=0;i

    {

    a[i][0]=1;a[i][i]=1;

    }

    for(int i=2;i

    for(int j=1;j

    a[i][j]=a[i-1][j-1]+a[i-1][j];

    for(int i=0;i

    {

    for(int j=0;j<=i;j++)

    printf("%d ",a[i][j]);

    printf("\n");//换行

    }

    }

    int main()

    {

    int n;

    printf("杨辉三角:\n请输入您要的行数!(行数应小于99,按0退出)\n");

    scanf("%d",&n);

    while(n>1&&n<99)

    {

    yanghuitiangle(n);

    printf("杨辉三角:\n请输入您要的行数!(行数应小于99,按0退出)\n");

    scanf("%d",&n);

    }

    }

    运行结果如下:

    9d2c66178d89b94592e3c88355fba00f.png

    接下来看一看如何使用队列来打印杨辉三角:

    #include

    #include

    #define MAXLEN 100

    typedef struct {

    int elem[MAXLEN]; // 用来存队列数据元素的数组

    int front; // 指示队首在数组中位置的标识量

    int rear; // 指示队尾在数组中位置的标识量

    int count;//记录队列元素个数

    }intQueue;

    /*队列初始化*/

    void InitQueue(intQueue *pQueue) // 指针类型作为形参,某个队列实例的地址

    {

    pQueue->front=0;//将该队列实例的队首和队尾标识量置零

    pQueue->rear=0;

    pQueue->count=0;

    }

    /*队列判空*/

    int IsEmpty(intQueue *pQueue) // 指针类型作为形参,某个队列实例的地址

    {

    if (pQueue->count == 0)

    return 1;

    else

    return 0;

    }

    /*队列判满*/

    int IsFull(intQueue *pQueue) // 指针类型作为形参,某个队列实例的地址

    {

    if (pQueue->count==MAXLEN)

    return 1;

    else

    return 0;

    }

    /*队列入队函数*/

    int EnQueue(intQueue *pQueue,int x)

    {

    if(IsFull(pQueue))// 1、若该队列已满,则入队列失败

    return 0;

    else

    {

    pQueue->count++;

    pQueue->elem[pQueue->rear++]=x;

    pQueue->rear=(pQueue->rear+1)%MAXLEN;

    return 1;

    }

    }

    /*删除队列中的队头元素*/

    #define EMPTY_QUEUE_ERROR -999999

    int DeQueue(intQueue *p)

    {

    int e;

    if(IsEmpty(p))//若表为空,返回错误值

    {

    return EMPTY_QUEUE_ERROR;

    }

    e=p->elem[p->front];

    p->count--;

    p->front++;

    p->front=(p->front+1)%MAXLEN;

    return e;//返回队头元素

    }

    /*清空队列*/

    void ClearQueue( intQueue *q )

    {

    q->count=0;

    q->front=-1;

    q->rear=0;

    }

    /*返回队列的元素个数*/

    int QueueLen( intQueue *q )

    {

    return q->count;

    }

    /*队列元素遍历*/

    void TraverseQueue( intQueue *q )

    {

    int n;

    while(1)

    {

    n=DeQueue(q);

    if(n==EMPTY_QUEUE_ERROR)

    break;

    printf("%d ",n);//不断地输出队头元素

    }

    printf("\n");

    }

    /*打印杨辉三角*/

    void YangHuiTiangle(int n)

    {

    intQueue a;//定义一个队列实例a;

    InitQueue(&a);//初始化队列a;

    EnQueue(&a,1);//将第一行的两个1入队

    EnQueue(&a,1);

    int i,j,e,s;//定义e记录左元素值,s记录右元素值

    for(i=1;i<=n;i++)//循环输出每一行的数据

    {

    EnQueue(&a,0);//0作为行与行之间的标记,辅助计算

    s=0;

    for(j=1;j<=(i+2);j++)//循环输出一行的每一个数据(具体职责是:输出第i行的(i+1)个数据,计算并存入第i+1行的(i+2)个数据)

    {

    e=DeQueue(&a);//e首先为上一行的第一个元素,然后第二个

    s=s+e;//最初时s=0+上一行第一个元素,然后是第一个+第二个……到j=i+2时,e为0,s为上一行的末尾的1,相加后新s仍为1

    EnQueue(&a,s);

    s=e;

    if(j!=(i+2))

    {

    printf("%d ",s);//到这里,s=e,所以输出的是这一行的元素

    }

    }

    printf("\n");//换行

    }

    }

    int main()

    {

    int n;

    printf("杨辉三角:\n请输入您要的行数!(行数应小于99,按0退出)\n");

    scanf("%d", &n);

    while (n)

    {

    system("cls");

    if (n>0 && n<99)

    YangHuiTiangle(n);

    printf("杨辉三角:\n请输入您要的行数!(行数应小于99,按0退出)\n");

    scanf("%d", &n);

    }

    }

    运行结果如下:

    12de16d23ab23e4f2573c839e68d4027.png

    数组打印杨辉三角与队列打印杨辉三角相关教程

    展开全文
  • 打印杨辉三角形

    2015-06-06 23:30:55
    一个有趣的C语言代码,打印杨辉三角形,有兴趣的同学看看

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,595
精华内容 1,038
热门标签
关键字:

打印杨辉三角