截取左上角四分之一,并平移部分:
实现代码:
int n=sc.nextInt();
int N=3+2*n;
String [][]arr=new String[N*2][N*2];
int flag=1;
for (int i =1; i <=N*2-1; i++) {
Arrays.fill(arr[i], ".");
}
for (int i =1; i <N; i+=2) {
Arrays.fill(arr[i],i, N+1,"$");
}
for (int j =1; j <N; j+=2) {
for (int i =j; i <=N; i++) {
arr[i][j]="$";
}
}
输出图像为(以N为3为例):
处理平移:
arr[1][1]=".";
arr[N][N]="$";
for (int i = 1; i <N; i+=2) {
arr[i][i+1]=".";
arr[i+2][i+1]="$";
}
for (int j = 1; j <N; j+=2) {
arr[j+1][j]=".";
arr[j+1][j+2]="$";
}
输出图像(以3为例):
再对称复制一下即可:
for (int i =1; i <=N; i++) {
for (int j = 1; j <=N; j++) {
arr[2*N-i][j]=arr[i][j];
arr[i][2*N-j]=arr[i][j];
arr[2*N-i][2*N-j]=arr[i][j];
}
}
输出图像(以3为例):
完整代码:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int N=3+2*n;
String [][]arr=new String[N*2][N*2];
int flag=1;
for (int i =1; i <=N*2-1; i++) {
Arrays.fill(arr[i], ".");
}
for (int i =1; i <N; i+=2) {
Arrays.fill(arr[i],i, N+1,"$");
}
for (int j =1; j <N; j+=2) {
for (int i =j; i <=N; i++) {
arr[i][j]="$";
}
}
arr[1][1]=".";
arr[N][N]="$";
for (int i = 1; i <N; i+=2) {
arr[i][i+1]=".";
arr[i+2][i+1]="$";
}
for (int j = 1; j <N; j+=2) {
arr[j+1][j]=".";
arr[j+1][j+2]="$";
}
for (int i =1; i <=N; i++) {
for (int j = 1; j <=N; j++) {
arr[2*N-i][j]=arr[i][j];
arr[i][2*N-j]=arr[i][j];
arr[2*N-i][2*N-j]=arr[i][j];
}
}
for (int i =1; i <=2*N-1; i++) {
for (int j = 1; j <=2*N-1; j++) {
System.out.print(arr[i][j]);
}
System.out.println();
}
}
}
总结:利用好对称,找规律即可