java实现第六届蓝桥杯打印大X

打印大X
打印大X

小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。
为了便于比对空格,所有的空白位置都以句点符来代替。

要求输入两个整数m n,表示笔的宽度,X的高度。用空格分开(0<m<n, 3<n<1000, 保证n是奇数)
要求输出一个大X

例如,用户输入:
9
程序应该输出:
***.....***
.***...***.
..***.***..
...*****...
....***....
...*****...
..***.***..
.***...***.
***.....***

(如有对齐问题,参看【图1.jpg】)

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

(如有对齐问题,参看【图2.jpg】)


资源约定:
峰值内存消耗(含虚拟机) < 256M
CPU消耗  < 1000ms


请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。

所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
package 第一次线下模拟;

import java.util.Scanner;

public class Demo9打印X {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int m = sc.nextInt();
		sc.close();
		int len = m / 2 * 2 + n;
		String[] nums = new String[m / 2];
		int i=0;
		for (  i = 0; i < m / 2 && i * 2 + n * 2 <= len; i++) {
			String s = "";
			for (int j = 0; j < i; j++) {
				s += ".";
			}
			for (int j = 0; j < n; j++) {
				s += "*";
			}
			StringBuilder sb = new StringBuilder(s);
			for (int j = 0; j < len - 2 * n - 2 * i; j++) {
				s += ".";
			}
			s=s+sb.reverse().toString();
//			for (int j = 0; j < n; j++) {
//				s += "*";
//			}
//			for (int j = 0; j < i; j++) {
//				s += ".";
//			}
			nums[i]=s;
			System.out.println(s);
		}
		for (; i<m/2; i++) {
			String s="";
			for (int j = 0; j <i; j++) {
				s+=".";
			}
			String ss =s;
			for (int j = 0; j <len-2*i; j++) {
				s+="*";
			}
			
			s+=ss;
			nums[i]=s;
			System.out.println(s);
		}
		String s="";
		for (int j = 0; j <i; j++) {
			s+=".";
		}
		String ss=s+"";
		for (int j = 0; j < n; j++) {
			s+="*";
		}
		s+=ss;
		System.out.println(s);
		for (int j = nums.length-1; j >=0; j--) {
			System.out.println(nums[j]);
		}
	}
}

import java.util.Scanner;

public class Main {
    
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int m = in.nextInt();
        int n = in.nextInt();
        char[][] A = new char[n][n + m - 1];
        for(int i = 0;i < n;i++)
            for(int j = 0;j < n + m - 1;j++)
                A[i][j] = '.';
        int mid = n / 2;
        for(int i = 0;i <= mid;i++) {
            int startL = i, endL = i + m - 1;      //X左边星号开始于截止纵坐标
            int startR = n  - 1 - i, endR = n + m - 2 - i; //X右边星号起止纵坐标
            for(int j = startL;j <= endL;j++) {
                A[i][j] = '*';
                A[n - 1 - i][j] = '*';
            }
            for(int j = startR;j <= endR;j++) {
                A[i][j] = '*';
                A[n - 1 - i][j] = '*';
            }
        }
        //打印题意结果
        for(int i = 0;i < n;i++) {
            for(int j = 0;j < n + m - 1;j++)
                System.out.print(A[i][j]);
            System.out.println();
        }
    }
}
原文地址:https://www.cnblogs.com/a1439775520/p/13077473.html