不知道是不是缩进的问题,每行的数字之间对不齐
另外在位数不一样时问题格外突出
题目
目的是写出满足题意的每列对齐的数字塔
我的代码
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n=input.nextInt();
for(int i=1;i<=n;i++) {
for(int j=1;j<=n-i;j++) {//缩进
System.out.print(" ");
}
for(int k=n,l=0;k<=n&&k>n-i;k--,l++) {//左半边
int m=(int) Math.pow(2,l);
System.out.print(m);
}
for(int c=1,d=i-2;c<=i-1;c++,d--) {//右半边
int o=(int) Math.pow(2,d);
System.out.print(o);
}
System.out.println();
}
}
运行结果
n = 6时
单边运行也不齐
n = 6时
求造成这样结果的原因,如果能给出基于原代码的改进方案就更好了
谢谢
用 format 格式化输出就行了
参考如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n - i; j++) {//缩进
System.out.format(" ");
}
for (int k = n, l = 0; k <= n && k > n - i; k--, l++) {//左半边
int m = (int) Math.pow(2, l);
System.out.format("%4d", m);
}
for (int c = 1, d = i - 2; c <= i - 1; c++, d--) {//右半边
int o = (int) Math.pow(2, d);
System.out.format("%4d", o);
}
System.out.println();
}
}
}
已回答,莫辜负
————————————————————————————————————————
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n=input.nextInt();
for(int i=1;i<=n;i++) {
// 左边空格数
for(int j=1;j<=n-i;j++) {
System.out.print(" ");
}
// 左半边数字
for(int k=n,l=0;k<=n && k>n-i;k--,l++) {
int m = (int) Math.pow(2,l);
System.out.printf("%-4d", m);
}
// 右半边数字
for(int c=1,d=i-2;c<=i-1;c++,d--) {
int o = (int) Math.pow(2,d);
System.out.printf("%-4d", o);
}
System.out.println();
}
}
input :数组A[1:n] //输入数组A有n个元素,:也可以表示‘到’的意思
output :A[1:n]中第i大的元素
Select(A,i)
For j<--1 TO n/5 DO
InsertSort(A[(j-1)*5+1],A[(j-1)*5+5];//利用插入排序寻找每一组中的中位数
swap(A[j],A[(j-1)*5+3]); //将所有中位数记录在数组A的前面
x<--Select(A[1:n/5],n/10); //在所有中位数中查找第n/10大的数,得到中位数的中位数x
k<--partition(A[1:n],x); //遍历数组A,将之分割成三部分,并找到x的坐标k
IF k=i THEN return x; //k为第i个元素则找到中位数x
else if k>i THEN return Select(A[1:k-1],i);//k>i在k之前寻找中位数
else THEN return Select(A[k+1:i-k); //k<i在k之后寻找中位数