打印大X

题目描述
小明希望用星号拼凑,打印出一个大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);
	}

}

发布了66 篇原创文章 · 获赞 9 · 访问量 3103
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字50 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览