Java中的金字塔模式
在这个高级网站上问这样一个新手问题太难了。但是经过这么多的尝试,甚至失去了希望,我不得不把自己带到这里来。我无法打印以下图案:Java中的金字塔模式,java,for-loop,Java,For Loop,在这个高级网站上问这样一个新手问题太难了。但是经过这么多的尝试,甚至失去了希望,我不得不把自己带到这里来。我无法打印以下图案: 1 1 2 1
1
1 2 1
1 2 4 2 1
1 2 4 8 4 2 1
1 2 4 8 16 8 4 2 1
1 2 4 8 16 32 16 8 4 2 1
但通过我令人厌倦的努力,我达到了以下目标:
public static void main(String[] args) {
int num = 1;
for (int i = 0; i < 15; i++) {
for (int j = 0; j < 15 - i; j++) {
System.out.print(" ");
}
for (int k = 0; k <= i; k++) {
System.out.print(num + " ");
}
System.out.println();
}
}
1
1 1
1 1 1
1 1 1 1
1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1
给你
public static void main(String[] args) {
int max = 6;
int padLength = (int) Math.ceil(Math.log10(Math.pow(2, max) + 1)) + 2;
for (int i = 0; i < max; i++) {
for (int j = 1; j < max - i; j++) {
System.out.print(pad(" ", padLength));
}
for (int k = 0; k <= i; k++) {
System.out.print(pad(Math.pow(2, k), padLength));
}
for (int k = i - 1; k >= 0; k--) {
System.out.print(pad(Math.pow(2, k), padLength));
}
System.out.println();
}
}
public static String pad(double d, int l) {
Integer i = (int) d;
return pad(i.toString(), l);
}
public static String pad(String s, int l) {
return String.format("%-" + l + "s", s);
}
解释
int padLength=int Math.ceilMath.log10Math.pow2,最大值+1+2;
Math.pow2,max-给出我必须显示的最大数字
Math.ceilMath.log10number+1-我使用它来确定表示特定数字的字符串的长度。当数字是10的精确幂时,我添加1以跳过边缘情况,例如log1010->1这在问题中指定的任务中永远不会发生,这只是为了溶液的纯度。Ceil只是把数字四舍五入
+2-指定了两个数字之间的最小间距示例为2个空格长,所以我只添加了这个
您可以在这里使用Integer.tostringitmath.pow2,max.length+2,但它没有那么漂亮:
返回字符串。格式%-+l+s,s;
首先,我构建的格式字符串看起来像%-3s,这意味着打印字符串的最小长度为3,在右边填充。第二个参数是我要打印的字符串。指
给你
public static void main(String[] args) {
int max = 6;
int padLength = (int) Math.ceil(Math.log10(Math.pow(2, max) + 1)) + 2;
for (int i = 0; i < max; i++) {
for (int j = 1; j < max - i; j++) {
System.out.print(pad(" ", padLength));
}
for (int k = 0; k <= i; k++) {
System.out.print(pad(Math.pow(2, k), padLength));
}
for (int k = i - 1; k >= 0; k--) {
System.out.print(pad(Math.pow(2, k), padLength));
}
System.out.println();
}
}
public static String pad(double d, int l) {
Integer i = (int) d;
return pad(i.toString(), l);
}
public static String pad(String s, int l) {
return String.format("%-" + l + "s", s);
}
解释
int padLength=int Math.ceilMath.log10Math.pow2,最大值+1+2;
Math.pow2,max-给出我必须显示的最大数字
Math.ceilMath.log10number+1-我使用它来确定表示特定数字的字符串的长度。当数字是10的精确幂时,我添加1以跳过边缘情况,例如log1010->1这在问题中指定的任务中永远不会发生,这只是为了溶液的纯度。Ceil只是把数字四舍五入
+2-指定了两个数字之间的最小间距示例为2个空格长,所以我只添加了这个
您可以在这里使用Integer.tostringitmath.pow2,max.length+2,但它没有那么漂亮:
返回字符串。格式%-+l+s,s;
首先,我构建的格式字符串看起来像%-3s,这意味着打印字符串的最小长度为3,在右边填充。第二个参数是我要打印的字符串。指
我发现另一个答案非常压倒性和戏剧性。你不需要太多的数学和复杂性来解决这个问题。这可能不是最好的代码,但我认为它很容易理解。甚至不需要解释,这是一种逐行的方法,最好保持简单
public static void main(String[] args) {
// Init
int row = 0;
int maxRows = 6;
int num = 1;
int indent = maxRows - 1;
// Printing loop
while (row < maxRows) {
// Indent
for (int i = 0; i < indent; ++i)
System.out.print(" ");
// Print nums
for (int i = 0; i < num; ++i)
System.out.printf("%4d", (int) Math.pow(2.0, i));
for (int i = num - 2; i >= 0; --i)
System.out.printf("%4d", (int) Math.pow(2.0, i));
// New line
System.out.println("");
// Adjustments
++row;
--indent;
++num;
}
我发现另一个答案非常压倒性和戏剧性。你不需要太多的数学和复杂性来解决这个问题。这可能不是最好的代码,但我认为它很容易理解。甚至不需要解释,这是一种逐行的方法,最好保持简单
public static void main(String[] args) {
// Init
int row = 0;
int maxRows = 6;
int num = 1;
int indent = maxRows - 1;
// Printing loop
while (row < maxRows) {
// Indent
for (int i = 0; i < indent; ++i)
System.out.print(" ");
// Print nums
for (int i = 0; i < num; ++i)
System.out.printf("%4d", (int) Math.pow(2.0, i));
for (int i = num - 2; i >= 0; --i)
System.out.printf("%4d", (int) Math.pow(2.0, i));
// New line
System.out.println("");
// Adjustments
++row;
--indent;
++num;
}
你意识到你永远不会改变num,对吗?你需要更新num,并跟踪你在队伍中的位置。如果notyetinhalf,num+=1;else num-=1;虽然你需要1,3,5,7的线长,但是你可以使用i++来表示…你金字塔的所有数字都是2的幂。。。考虑如何根据您在特定行中的位置获取指数!这并不难实现…我现在明白了。我会尝试一下,然后再回来。你知道你永远不会改变num,对吗?你需要更新num,并跟踪你在队伍中的位置。如果notyetinhalf,num+=1;else num-=1;虽然你需要1,3,5,7的线长,但是你可以使用i++来表示…你金字塔的所有数字都是2的幂。。。考虑如何根据您在特定行中的位置获取指数!这并不难实现…我现在明白了。我会尝试一下,然后再回来。这是唯一一个对任何输入都100%正确的答案。输出没有失真。好的。我的答案糟透了,所以我把它删除了。你能告诉我生成填充的逻辑吗?谢谢。@BoratSagdiyev嘿,我补充了解释。“我希望这会有帮助。”姆莱科竖起大拇指说。这是唯一一个对任何输入都100%正确的答案。输出没有失真。好的。我的答案糟透了,所以我把它删除了。你能告诉我生成填充的逻辑吗?谢谢。@BoratSagdiyev嘿,我补充了解释。“我希望这会有帮助。”姆莱科竖起大拇指说。这是令人敬畏的逻辑