杨辉三角 右对齐 java

raleigher 2009-07-20 06:50:19
杨辉三角 java不难 今天想到个问题 希望大家解决 就是输入一个数N 打印N行。 要求右对齐。
有的个问题就是 杨辉三角 越到后面 每项占的字节就越大 不知道怎么才能对齐,朋友给个方案是说算出最后一行的最大数,然后转换字节数,让每项都占最大字节数 然后右对齐。 请教下大家怎么解决。谢谢

import java.util.*;
public class YangHui{
public static void main(String args[])
{
System.out.println("输入行数n:");
Scanner in=new Scanner(System.in);
int x;
x=in.nextInt();
int i;
int yh[]=new int[x];
for(i=0;i<x;i++)
{ yh[i]=1;
for(int j=i-1;j>0;j--)
yh[j]=yh[j-1]+yh[j];
for(int j=0;j<=i;j++)
System.out.print(yh[j]+"\t");
System.out.println();}
}
}
...全文
604 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
bigbug9002 2009-07-22
  • 打赏
  • 举报
回复
恭喜一下。
raleigher 2009-07-22
  • 打赏
  • 举报
回复
复制放上来的时候有问题 在命令行里显示是正常的
raleigher 2009-07-22
  • 打赏
  • 举报
回复
还是我自己整出来了
发下代码给你们看吧
public class YangHui {

public static void main(String[] args) throws Exception{
int k=args.length;
for(int p=0 ;p<k ; p++)
{
int m=1;
int x=Integer.parseInt(args[p]);
System.out.print("输入的行数是: "+x+"\n");
int[] a=new int[x];
for(int i=0;i<x ;i++)
{
a[i]=1;
for(int j=i-1;j>0;j--)
{
a[j]=a[j-1]+a[j];
if(m<a[j]) //取最大值
{
m=a[j];
}
}
}
System.out.print("杨辉三角中最大项是:"+m+"\n");

String s1=String.valueOf(m);//数值转换成字符串
//输出
for(int i=0;i<x ;i++)
{
a[i]=1;
for(int j=0;j<x-i;j++)
{
int n=0;
while(n<s1.length()+1)
{
System.out.print(" ");
n++;
}
}
for(int j=i-1;j>0;j--)
{
a[j]=a[j-1]+a[j];
}
for(int j=0;j<=i;j++)
{
String t=" ";
String s2=String.valueOf(a[j]);
while(s2.length()<s1.length()+1)
{
s2=t+s2;
}
System.out.print(s2);
}
System.out.println();
}
}
}

}

输入 java YangHui 5 10 12
打印结果:

E:\workspace\test\src>java YangHui 5 10 12
输入的行数是: 5
杨辉三角中最大项是:6
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
输入的行数是: 10
杨辉三角中最大项是:126
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
输入的行数是: 12
杨辉三角中最大项是:462
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
a3126006 2009-07-21
  • 打赏
  • 举报
回复
那个数组????看不懂。。。额
liangwansheng 2009-07-21
  • 打赏
  • 举报
回复
学习
supermax 2009-07-21
  • 打赏
  • 举报
回复
学习
feng_20080615 2009-07-21
  • 打赏
  • 举报
回复
学习
linhui9010 2009-07-21
  • 打赏
  • 举报
回复
右对齐啊,加if就好了, 要是是大于等于10,打印时加一个空格 小于10时,打印时加两个空格
bigbug9002 2009-07-20
  • 打赏
  • 举报
回复
三角矩阵用一维数组来存放,只存贮了上三角部分,主要是为了节省空间。算法在数据结构上有。
对本题来说,可以用二维数组。浪费的空间不算太多。而且这不是本贴所关心的问题。
彷徨的蜗牛 2009-07-20
  • 打赏
  • 举报
回复
整的算法我都看不懂,怎么弄的,还是搞我的面向对象的杨辉三角,
楼上上回给我整的那个,我还有点迷茫
bigbug9002 2009-07-20
  • 打赏
  • 举报
回复
这我以前在其它贴子发过的程序,我加了一些注释,你看一下吧,也许能给你提供一些思路.

public class YangHuiTriangle {
private int n;
/*****用一个一维数组存放下三角的二维数组. 二维数组中第i行,第j列的元素放在mat[i*(i+1)/2+j+1]中
*/
private long[] mat;
public YangHuiTriangle(int n) {
this.n = n;
mat=new long[(1+n)*n/2+1];
mat[0]=1;
for(int i=1;i<n;i++){
for(int j=0;j<=i;j++){
/* 超出了边界mat[(1+i)*i/2+j+1]=1
*/
if(i*(i-1)/2+j<i*(i-1)/2+1||i*(i-1)/2+j>=i*(i-1)/2+i){
mat[(1+i)*i/2+j+1]=1;
}else{
/* 当前元素的值等于左上+正上元素之和.
*/
mat[(1+i)*i/2+j+1]=mat[i*(i-1)/2+j]+mat[i*(i-1)/2+j+1];
}
}
}
}

//这个打印程序可以是以金字塔形式打印杨辉三角形.数据位数可以7位,但实际屏幕放不下。可以打16行。
//如果是在DOS窗口下打印,可以在窗口标题栏上,右键单击,选属性,把屏幕的宽度增大到200。这样可以看到20以上的杨辉三角形了。
//思路是每一个数据的输出都占固定的长度,数据本身小于8,前面用空格补足,本方法中数据输出定为8

public void printYangHuiTriangle() {
System.out.println("杨辉三角(" + n + ")层:");
String space=" ";
System.out.println(space.substring(0,(n-1)*4+7)+1);
long temp;
for (int i = 1; i <= n - 1; i++) {
System.out.print(space.substring(0,(n-i-1)*4));
for (int j = 0; j <= i; j++) {
temp=mat[(1+i)*i/2+j+1];
System.out.print(space.substring(0,8-(Long.toString(temp)).length())+temp);
}
System.out.println();
}
}


public static void main(String[] args) {
YangHuiTriangle y = new YangHuiTriangle(20);
y.printYangHuiTriangle();
}

}



F:\java>java YangHuiTriangle
杨辉三角(20)层:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1
1 15 105 455 1365 3003 5005 6435 6435 5005 3003 1365 455 105 15 1
1 16 120 560 1820 4368 8008 11440 12870 11440 8008 4368 1820 560 120 16 1
1 17 136 680 2380 6188 12376 19448 24310 24310 19448 12376 6188 2380 680 136 17 1
1 18 153 816 3060 8568 18564 31824 43758 48620 43758 31824 18564 8568 3060 816 153 18 1
1 19 171 969 3876 11628 27132 50388 75582 92378 92378 75582 50388 27132 11628 3876 969 171 19 1

F:\java>
dw_2009 2009-07-20
  • 打赏
  • 举报
回复
这个貌似有点困难……能不能在刚开始打印的几组数里 设置间隔大一些?
bigbug9002 2009-07-20
  • 打赏
  • 举报
回复
新版不能向右扩展了?
bigbug9002 2009-07-20
  • 打赏
  • 举报
回复
右对齐和左对齐都不好看啊.
中对齐才是非常漂亮的杨辉三角形.
F:\java>java YangHuiTriangle
杨辉三角(15)层:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1
1 10 45 120 210 252 210 120 45 10 1
1 11 55 165 330 462 462 330 165 55 11 1
1 12 66 220 495 792 924 792 495 220 66 12 1
1 13 78 286 715 1287 1716 1716 1287 715 286 78 13 1
1 14 91 364 1001 2002 3003 3432 3003 2002 1001 364 91 14 1

raleigher 2009-07-20
  • 打赏
  • 举报
回复
请高手花几分钟时间写个代码,小弟不胜感激。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧