我说的是打印这种模式
1
121
12321
1234321
123454321
12345654321
1234567654321
123456787654321
使用多个for循环非常容易。但我试图使用单个for循环来实现它但不能这样做。 有可能吗?
my code:-
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= 8; ++i) {
System.out.println(sb.append(i)
+ new StringBuilder(sb).reverse().substring(1));
但我真的很想看看它是如何看待它被用于任何预定义的函数,如reverse()等可用的,它们本身在它们内部使用循环。 只是一个简单的“for”循环。
答案 0 :(得分:4)
使用
这一事实1*1 = 1
11*11 = 121
111*111= 12321
....
你可以这样做:
public static void main(String[] args) {
int j = 0;
for(long i = 1 ; i<1000000000; i = i+(long)Math.pow(10, j)){
System.out.println(i*i);
j++;
}
}
答案 1 :(得分:3)
这是一种仅使用一个循环来写出这种模式的方法:
class RhombusNumbers{
public static void main(String[] args){
String left = "";
int max = 8;
for(int i = 1; i <= max; i++){
System.out.println(left + i + new StringBuilder(left).reverse().toString());
left+=i;
}
}
}
它会跟踪左侧数字,并且每次都会添加一个新数字。
修改强>
没有StringBuilder,因为StringBuilder.reverse()使用循环并且还会反转10:
class RhombusNumbers{
public static void main(String[] args){
String left = "";
String right = "";
int max = 8;
for(int i = 1; i <= max; i++){
System.out.println(left + i + right);
left+=i;
right = i + right;
}
}
}
答案 2 :(得分:1)
就像这样。
#include <stdio.h>
int main(void){
for(int i = 1, n = 1, d = 1; n <= 8; i += d){
if(i == n){
d = -d;
} else if(i == 0){
d = -d;
++n;
puts("");
continue;
}
printf("%d", i);
}
}
答案 3 :(得分:0)
你可以通过递归来解决它:
class Rhombus {
public static void left(int x) {
if (--x > 0) {
left(x);
System.out.print(x);
}
}
public static void right(int x) {
if (--x > 0) {
System.out.print(x)
right(x);
}
}
public static void main(String[] args) {
for (int i = 1; i <= 3; i++) {
left(i);
System.out.print(i);
right(i);
System.out.println();
}
}
}
答案 4 :(得分:0)
试试这个。
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= 8; ++i) {
System.out.println(sb.append(i)
+ new StringBuilder(sb).reverse().substring(1));
}