题目描述
小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。
为了便于比对空格,所有的空白位置都以句点符来代替。
要求输入两个整数m n,表示笔的宽度,X的高度。用空格分开(0<m<n, 3<n<1000, 保证n是奇数)
要求输出一个大X
例如,用户输入:
3 9
程序应该输出:
…
.***…**.
….…
……
……
……
…***.***…
.***…***.
…
再例如,用户输入:
4 21
程序应该输出
…
.….
………
………
………
………
………
………
……
……
……
……
…********…
………
………
………
………
………
………
.….
…
输入
输入两个整数m n,表示笔的宽度,X的高度。用空格分开(0<m<n, 3<n<1000, 保证n是奇数)
输出
输出一个大X
样例输入
3 9
样例输出
…
.***…**.
….…
……
……
……
…***.***…
.***…***.
…
这题就是找规律,暴力递归就出来了,先从左边开始打印,然后从右边开始打印,最后到中间可能会重复打印,不过也没差,也就是多跑几次。。这题的数据量不大
package javas.weleness.打印大x;
import java.util.Scanner;
public class Main {
private static char icon = '*';
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int m = scanner.nextInt(), n = scanner.nextInt();
char[][] map = new char[n][n+m-1];
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < n+m-1; j++) {
map[i][j] = '.';
}
}
print(map, 0, n, m, 0);
show(map,m,n);
}
private static void show(char[][] map,int m ,int n){
for (int i = 0; i < map.length; i++) {
for (int j = 0; j <n+m-1 ; j++) {
System.out.print(map[i][j]);
}System.out.println();
}
}
private static void print(char[][] map,int start,int n ,int m , int count) {
if(count == n) return;
for (int i = start; i < m+start; i++) {
map[start][i] = icon;
map[n-1-start][i] = icon;
}
for (int i = n+m-1-start-1; i >= n-1-start; i--) {
map[n-1-start][i] = icon;
map[start][i] = icon;
}
print(map,start+1,n,m,++count);
}
}