回 帖 发 新 帖 刷新版面

主题:打印杨辉三角形的小程序

@ johnny1208 :
老兄,为了完成您布置的作业,昨晚花了一晚上,今天早晨又折腾了一上午,终于搞定了。

[quote]
          1
        1   1
      1   2   1
    1   3   3   1
  1   4   6   4   1
1   5   10  10  5   1
     。。。。。。
上面这个是杨辉三角,要打印他很简单,用个2唯数组写个百把十句就OK了。但要是限定只允许你使用循环嵌套做,你不会数学原理能行吗?所以代数还是很重要滴,不学是不行滴。[/quote]

问题出处:http://www.programfan.com/club/showbbs.asp?id=47781

这是我的小程序:

#include <iostream>
#include <stdio.h>

using namespace std;

// define function prototype
void yhtriangle(int& x);

int main()
{
    int lines;
            
    cout<<"This is a little prog to print YangHui triangle ."<<endl;
    cout<<"Please enter the lines what you want to print: "<<endl;
    cin>>lines;
    
    yhtriangle(lines);
    
    cout<<endl<<endl<<endl;

    system("pause");

    return 0;
        
}

void yhtriangle(int& x)
{
    
    int *yanghui;
         int *temp;       //to save operation value.   

    int n;          
    int blank;      //counter the space numbers
    int counter;
        
    //cin>>x;       // I decide to input x from main()
    
    //make two dynamic arrays
    yanghui = new int[x];
    temp = new int[x];
    
    //initialize arrayes
    
    for(n = 0; n < x; n++)
    {
        yanghui[n] = 0;
        temp[n] = 0;
       }
       
         yanghui[0] = 1;  
         temp[0] = 1;
       blank = x;

    //circulate print triangle
    for(counter = 0; counter < x; counter++)
    {
        for(n = 0; n < blank; n++)
            cout<<" ";            
        for(n = 0; n < counter; n++)
        {
            yanghui[n+1]=temp[n+1]+temp[n];    
            cout<<yanghui[n]<<" "<<flush;
                      temp[n] = yanghui[n];
        }
                                
        cout<<endl;
        blank--;
    }
    delete new int[x];   //release dynamic array's memory.

}

程序运行正常,但打出的三角形不美观,希望大家帮忙改进。

回复列表 (共16个回复)

11 楼


真不好意思, 我把这篇陈年文章掏了出来。
由于我学校最近也叫我来写这个程序, 做了一些搜寻, 我找到了这里, 看到了楼主的代码, 给我在排版上很大的灵感。 我自己也写了相对简单一点的代码。
#include <iostream>
#include <iomanip>

using namespace std;

int pascal_tri_recur(int n_row, int r_pos);
void print_pascal_tri(int x);

int main()
{
    int lines;
            
    cout<<"This is a little prog to print YangHui triangle ."<<endl;
    cout<<"Please enter the lines what you want to print: "<<endl;
    cout<<"lines = "<<flush;
    cin>>lines;
    
    print_pascal_tri(lines);
    

    return 0;
        
}

int pascal_tri_recur(int n_row, int r_pos)
{
  if (r_pos == 0 || r_pos == n_row)
    return 1;
  else
    return pascal_tri_recur(n_row-1, r_pos-1)+pascal_tri_recur(n_row-1, r_pos);
}

void print_pascal_tri(int x)
{
  int n,j,blank;
  blank = x*5;
    for (n = 0; n <= x; n++)
    {
      for(j = 0; j<= n; j++)
    {
      if(j ==0)
      {
        cout<<setw(blank)<<pascal_tri_recur(n,j);
      }
      else
      {
        cout<< setw(4)<< pascal_tri_recur(n, j);
      }
    }
      cout << endl;
      blank=blank-2;
    }
}

12 楼

也可以在打印时浪费一点空间,图形就会对称了

13 楼


本人觉得  只要先把顶上的一个1先找好位置  在用规则就行了  各位好友   怎样


我编编看

14 楼


傻B,用c多简单啊

15 楼

晚上用c编了个!


#include <stdio.h>
void main()
{
    int yanghui[10][10]={{1},{1},{1},{1},{1},{1},{1},{1},{1},{1}};
    int i,j;
    for(i=1;i<10;i++)
        yanghui[i][i]=1;
    for(i=2;i<10;i++)
        for(j=1;j<i;j++)
            yanghui[i][j]=yanghui[i-1][j-1]+yanghui[i-1][j];
    for(i=0;i<10;i++)
    {
        for(j=0;j<=i;j++)
            printf("%d    ",yanghui[i][j]);
        printf("\n");
    }
}

16 楼

我来回复

您尚未登录,请登录后再回复。点此登录或注册