打印大X

小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。 为了便于比对空格,
所有的空白位置都以句点符来代替。  要求输入两个整数m n,表示笔的宽度,X的高度。用空格分开
(0<m<n, 3<n<1000, 保证n是奇数) 要求输出一个大X 
例如,用户输入: 3 9

程序应该输出:

***.....***
.***...***.
..***.***..
...*****...
....***....
...*****...
..***.***..
.***...***.
***.....***

再例如,用户输入:
4 21
程序应该出
****................****
.****..............****.
..****............****..
...****..........****...
....****........****....
.....****......****.....
......****....****......
.......****..****.......
........********........
.........******.........
..........****..........
.........******.........
........********........
.......****..****.......
......****....****......
.....****......****.....
....****........****....
...****..........****...
..****............****..
.****..............****.
****................****

注意:根据提议必须保证n为奇数

import java.util.Scanner;

public class Temp {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		// 星星的总数
		 int starNum = sc.nextInt();
//		int starNum = 13;
		// 大X的高度
		 int bigXHeight = sc.nextInt();
//		int bigXHeight = 39;
		// 大X的宽度
		int width = starNum + bigXHeight - 1;
		// 第一行初始点的总数
		int pointNum = bigXHeight - starNum - 1;
		// 对应偶数递减
		int tempEvenStar = starNum * 2;
		// 对应奇数递减
		int tempOddStar = starNum * 2 - 1;
		// 打印X的上半部分
		for (int i = 0; i < bigXHeight / 2; i++) {
			for (int j = 0; j < i; j++) {
				System.out.print(".");
			}

			if (pointNum - i * 2 > 0) {
				for (int j = 0; j < starNum; j++) {
					System.out.print("*");
				}
				for (int j = 0; j < pointNum - i * 2; j++) {
					System.out.print(".");
				}

				for (int j = 0; j < starNum; j++) {
					System.out.print("*");
				}
			} else {
				if (starNum % 2 == 0 && tempEvenStar >= starNum) {
					for (int j = 0; j < tempEvenStar; j++) {
						System.out.print("*");
					}
					tempEvenStar -= 2;
				} else {
					if (tempOddStar >= starNum) {
						for (int j = 0; j < tempOddStar; j++) {
							System.out.print("*");
						}
						tempOddStar -= 2;
					}
				}
			}

			for (int j = 0; j < i; j++) {
				System.out.print(".");
			}

			System.out.println();
		}

		// int startPrintPoint=
		int count = 0;
		// 统计下半部分中间点总共有多少行
		while (pointNum > 0) {
			count++;
			pointNum -= 2;
		}
		// 打印X的下半部分
		for (int i = 0; i < bigXHeight / 2 + 1; i++) {
			for (int j = 0; j < bigXHeight / 2 - i; j++) {
				System.out.print(".");
			}

			if (i <= bigXHeight / 2 - count) {
				for (int j = 0; j < starNum + i * 2; j++) {
					System.out.print("*");
				}
			} else {
				for (int j = 0; j < starNum; j++) {
					System.out.print("*");
				}

				pointNum += 2;
				for (int j = 0; j < pointNum; j++) {
					System.out.print(".");
				}

				for (int j = 0; j < starNum; j++) {
					System.out.print("*");
				}
			}

			for (int j = 0; j < bigXHeight / 2 - i; j++) {
				System.out.print(".");
			}
			System.out.println();
		}

	}

}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值