当前位置: 代码迷 >> C语言 >> 打印杨辉三角,会的来看看哪里错了
  详细解决方案

打印杨辉三角,会的来看看哪里错了

热度:257   发布时间:2008-05-09 22:38:58.0
打印杨辉三角,会的来看看哪里错了
输入行数,打印杨辉三角:
如输入 5  则打印输出:
        1
       1 1
      1 2 1
     1 3 3 1
    1 4 6 3 1
但是我的却这样输出:
         1
        1 1 1
       1 2 2 2 1
      1 2 2 2 2 2 1
     1 4 4 4 4 4 4 4 1
我的代码如下,帮忙改改吧,
   #include "stdio.h"
main()
{
    int i,j,k,l,n;
    int a[1000];
    l=0;
    k=0;
    printf("please input a number:\n");
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n+i-1;j++)
        {
            if(j<=n-i)
            printf(" ");
            else
            {
                if(j==n-i+1||j==n+i-1)
                {
                    a[k]=1;
                    printf("%d ",a[k]);
                    k++;
                }
                else
                {
                    a[k]=a[k-3-l]+a[k-2-l];
                    printf("%d ",a[k]);
                    k++;
                    l++;
                }
            }
        }
        printf("\n");
    }

}
搜索更多相关的解决方案: 杨辉三角  quot  打印  int  input  

----------------解决方案--------------------------------------------------------
书上就有
----------------解决方案--------------------------------------------------------
可是我的书上没有啊
----------------解决方案--------------------------------------------------------
这代码多 你搜下  帮我的看看
----------------解决方案--------------------------------------------------------
杨辉三角
#include<stdio.h>
void main()
{
    int a[10][10],i,j;
    for(i=0;i<10;i++)
    {
        a[i][0]=1;
        a[i][i]=1;
    }
    for(i=2;i<10;i++)
        for(j=1;j<i;j++)
            a[i][j]=a[i-1][j]+a[i-1][j-1];
        for(i=0;i<10;i++)
        {
            for(j=0;j<=i;j++)
                printf("%5d",a[i][j]);
            printf("\n");
        }

}
----------------解决方案--------------------------------------------------------
1 程序书写不错 但是算法有问题,试试二维数组。还有加点注释吧,方便自己理解。
我的解法:

#include <stdio.h>
#include <math.h>
void main()
{
    int i;//counter
    int j;//counter
    int k;//counter
    int yhAngle[100][100]={0};//define & initialize two-dimensional array 定义并初始化二维数组
    int rows=0;//yhAngle's rows杨辉三角的行数
    
    printf("Please enter the rows of the yhAngle:\n");//input the rows 输入行数
    scanf("%d",&rows);
    
    for (i = 0;i < rows;i++)//initialize the first line to be 1 初始化第一列元素为1
    {
        yhAngle[i][0] = 1;
    }
    
    for (i = 1; i < rows; i++)    //evaluate yhAngle 为二维数组赋值
    {
        for (j = 1; j <= i; j++) //j <= i 对角线结束
        {
            if (i == j)
            {
                yhAngle[i][j] = 1;
                continue;
            }
            yhAngle[i][j] = yhAngle[i-1][j-1] + yhAngle[i-1][j];
        }
    }
    
    for (i = 0; i < rows; i++)    //print yanghui Angle 打印杨辉三角
    {
        for(k=1; k <= fabs(rows-i); k++)//make space
        {
            printf(" ");
        }
        
        for (j = 0; j <= i; j++)//print mumber打印数字
        {
            printf("%2d",yhAngle[i][j]);
        }
        printf("\n");
    }
}
----------------解决方案--------------------------------------------------------
#include <iostream>
#include <math.h>
using namespace std;

int a[100];

void make(int n,int w)
{
    int prev=0,tab=(n+1)*w>>1;
    if (w%2)w++;
    for (int i=1;i<=n;i++)
    {
        printf("%*c",tab-=w>>1,' ');
        for (int j=0;j<i;j++)
        {
            if (j==0 || j==i-1)prev=a[j]=1;
            else {int t=prev;prev=a[j];a[j]+=t;}
            printf("%*d",w,a[j]);
        }
        printf("\n");
    }
}

int main()
{
    make(12,4);
}


自己第三次写这个程序,空间复杂度从n^2到2*n到现在的n。很有些感悟……
----------------解决方案--------------------------------------------------------
tab=(n+1)*w>>1
移位的作用是什么??
----------------解决方案--------------------------------------------------------
这个是为了好看做的排版控制。你算几个tab出来就知道了……
----------------解决方案--------------------------------------------------------