数字金字塔
1
121
12321
1234321_______________________________________________________________________________________________________________
/**
*
* @author 本楼主
*版本1.0
*/
public class DIgui { public static void pyramid(int i,int n )
{
if(i==n) return;
int num;
for(i=1;i<n+1;i++)
{ num=i;
for(int j=0;j<n-i;j++)
System.out.print(" ");
if(num>1)
{
for(int m=0;m<i;m++)
num--;
for( int m=0;m<i;m++)
{
num++;
System.out.print(num);
}
for(int m=0;m<i-1;m++)
{ num--;
System.out.print(num);
}
}
else
System.out.print(num);
System.out.println();
}
pyramid(i,++n);
}
public static void main(String args[])
{
pyramid(1,4);
}}
1
121
12321
1234321_______________________________________________________________________________________________________________
/**
*
* @author 本楼主
*版本1.0
*/
public class DIgui { public static void pyramid(int i,int n )
{
if(i==n) return;
int num;
for(i=1;i<n+1;i++)
{ num=i;
for(int j=0;j<n-i;j++)
System.out.print(" ");
if(num>1)
{
for(int m=0;m<i;m++)
num--;
for( int m=0;m<i;m++)
{
num++;
System.out.print(num);
}
for(int m=0;m<i-1;m++)
{ num--;
System.out.print(num);
}
}
else
System.out.print(num);
System.out.println();
}
pyramid(i,++n);
}
public static void main(String args[])
{
pyramid(1,4);
}}
public static void main(String[] args) {
pyramid(10);
} // n代表层数
public static void pyramid(int n) {
int i = 0;
for (int m = 1; m <= n; m++) {
//输出空格
for(int k=n-m;k>=1;k--){
System.out.print(" ");
}
//输出左边的数
for (i = 1; i <= m; i++) {
System.out.print(i);
}
//输出右边的数
for (int j = i - 2; j >= 1; j--) {
System.out.print(j);
}
//换行
System.out.println();
}
}
}
结果:
1
121
12321
1234321
123454321
12345654321
1234567654321
123456787654321
12345678987654321
12345678910987654321
Yanghui yang = new Yanghui();
yang.printYanghuiTriangle(13);
} /**
* 生成指定行数的杨辉三角形
* @param lines 杨辉三角形的行数
*/
public void printYanghuiTriangle(int lines) {
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) {
for(int i = 0, k = (yanghui.length - line) * width; i < k; i++) {
System.out.print(" ");
}
for(int i = 0; i < line; i++) {
if(i > 0) {
for(int j = 0; j < width; j++) {
System.out.print(" ");
}
}
System.out.printf("%" + width + "d", yanghui[i]);
}
System.out.println();
if(width > 1) {
System.out.println();
}
}
} 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
{
final static int M=9;
static void count(int n,int k) //递归方法,输出一行 {
int i;
if (n==1) //在1前留空 for (i=1; i<=M-k; i++) System.out.print(" "); System.out.print(" "+n); if (n<k) {
count(n+1,k);
System.out.print(" "+n); } }
public static void main(String args[]) {
int i;
for (i=1; i<=M; i++) {
count(1,i);
System.out.println(); } } }