编写程序打印以下的杨辉三角形

(要求打印10行)

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1

麻烦各为高手了.
要C++的

public static void main(String[] args) {
textYH yang = new textYH();
yang.printYanghuiTriangle(5);
}

/**
* 生成指定行数的杨辉三角形
*
* @param lines 杨辉三角形的行数
*/
public void printYanghuiTriangle(int lines) {
if(lines < 1) {
throw new IllegalArgumentException("lines must be great than 0.");
}
if(lines > 30) {
throw new IllegalArgumentException("lines is too big.");
}
int[] line = new int[lines];
int maxLen = getMaxLen(lines);
for(int i = 0; i < lines; i++) {
line[0] = line[i] = 1;
for(int j = 1, k = i / 2, pre = line[0]; j <= k; j++) {
int cur = line[j];
line[i - j] = line[j] += pre;
pre = cur;
}
printLine(line, i + 1, maxLen);
}
}

/**
* 根据指定行数的杨辉三角形,计算其中最大数字的长度
* @param lines 杨辉三角形的行数
* @return 最大数字的长度
*/
private int getMaxLen(int lines) {
int k = lines / 2;
long maxNum = factorial(k + 1, lines - 1) / factorial(1, lines - 1 - k);
return getLength(maxNum);
}

/**
* 阶乘计算
* @param start 阶乘计算的起始数字
* @param num 阶乘计算的终止数字
* @return 阶乘计算结果
*/
private long factorial(int start, int num) {
long result = start > 0 ? start : 1L;
while(num > start) {
result *= num--;
}
return result;
}

/**
* 根据指定数字计算数字的长度
* @param num 数字
* @return 数字的长度
*/
private int getLength(long num) {
int len = 0;
while(num > 0L) {
num /= 10L;
len++;
}
return len;
}

private void printLine(int[] yanghui, int line, int width) {
printSpaces((yanghui.length - line) * width);

for(int i = 0; i < line; i++) {
if(i > 0) {
printSpaces(width);
}
printSpaces(width - getLength(yanghui[i]));
System.out.print(yanghui[i]);
}
System.out.println();
if(width > 1) {
System.out.println();
}
}

private void printSpaces(int spaceCount) {
for(int i = 0; i < spaceCount; i++) {
System.out.print(" ");
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-12-03
要什么程序啊?C的还是别的啊?

看看要的是这个不?
=================
#include <iostream.h>

void main()
{
int i,j,n=10;
int a[100];
a[0]=a[10]=a[11]=1;
for(i=0;i<n;i++)
{
if(i==0) a[0]=1;
else if(i==1) a[10]=a[11]=1;
else
{
a[i*n+0]=a[i*n+i]=1;
for(j=1;j<i;j++)
{
a[i*n+j]=a[(i-1)*n+j-1]+a[(i-1)*n+j];
}
}
for(j=0;j<=i;j++) cout<<a[i*n+j]<<' ';
cout<<endl;
}
}
第2个回答  2008-12-02
#include<stdio.h>
void main()
{
int yanghui(int x,int b[20]);
int a[20];
int n;
printf("da yin hang shu :\n") ;
scanf("%d",&n);
yanghui(n,a[20]);
}

int yanghui(int x,int b[20])
{
int i,j;
for(i=1;i<=x;i++)
{
if(i==1)
{
b[0]=1;
printf("%d\n",b[0]);
}
if(i==2)
{
b[1]=1;
printf("%d %d\n",b[0],b[1]);
}
if(i>2)
{
for(j=i-2;j>0;j--)
{
b[j]+=b[j-1];
}
b[i-1]=1;
for(j=0;j<i;j++)
{
printf("%d ",b[j]);
}
printf("\n");
}
}
}
第3个回答  2008-12-03
#include <stdio.h>
#define N 6
void main()
{int i,j,a[N][N]; a[0][0]=1;

for(j=1;j<=N;j++)cout<<" "; cout<<"%4d"<<endl<<a[0][0];

for(i=1;i<N;i++) { for(j=1;j<=N-i;j++) cout<<" ";

a[i][0]=1; cout<<"%4d"<<endl<<a[i][0];

for(j=1;j<N;j++) {a[i][j]=a[i-1][j-1]+a[i-1][j];cout<<a[i][j]?"%4d":" ",a[i][j]; }
cout<<endl;
}

}
第4个回答  2008-12-05
#include <stdio.h>
int main(void)
{
int a[11],i,j;
for(i=1;i<10;i++)
{
a[i]=1;

for(j=i-1;j>=2;j--)
a[j]=a[j]+a[j-1];
for(j=1;j<=i;j++)
printf("%4d",a[j]);
printf("\n");
}
return 0;
}
相似回答
大家正在搜