一. 题目描述
输入nn,输出nn行nn列的由+和.组成的正方形,其中最外面一圈全是+,第二圈全是.,…,对于第ii圈,如果ii是奇数,那么全是+,否则全是.。
输入格式
一行,一个整数n。
输出格式
n行,为满足题目要求的正方形。注意不要有行末空格。
样例输入
样例输出
1 2 3 4 5 6 7 8 9 10
| ++++++++++ +........+ +.++++++.+ +.+....+.+ +.+.++.+.+ +.+.++.+.+ +.+....+.+ +.++++++.+ +........+ ++++++++++
|
数据范围
对于100%的数据,保证2≤n≤100。
二. 笔者见解
由题目示例可见,该图形是一个中心对称图形,当要打印此类图形时我们可以使用对称思想
1.打印左上角的1/4图形
2.利用左右对称原理打印图形的右半部分(左右对称x轴改变y轴不改变)
3.利用上下对称原理打印图形的下半部分(上下对称y轴改变x轴不改变)
三. 作者代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| import java.util.Scanner;
public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n; while(true){ n = scanner.nextInt(); char[][] arr = new char[n+1][n+1]; for (int i = 1; i <= (n+1)/2 ; i++) { if(i%2 == 1){ for (int j = i; j <= (n+1)/2; j++) { arr[j][i]='*'; arr[i][j]='*'; } }else{ for (int j = i; j <= (n+1)/2; j++) { arr[j][i]='.'; arr[i][j]='.'; } } }
for(int i=1;i<=(n+1)/2;i++){ for(int j=(n+1)/2+1;j<=n;j++){ arr[j][i]=arr[n-j+1][i]; } }
for(int i=1;i<=n;i++){ for(int j=(n+1)/2+1;j<=n;j++){ arr[i][j] = arr[i][n-j+1]; } }
for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { System.out.print(arr[i][j]); } System.out.println(); }
}
}
}
|
四. 运行结果
