【问题描述】
* 打印大X
*
* 小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度。
* 为了便于比对空格,所有的空白位置都以句点符来代替。
*
* 要求输入两个整数m n,表示笔的宽度,X的高度。用空格分开(0<m<n, 3<n<1000, 保证n是奇数)
* 要求输出一个大X
例如:
例如,用户输入:
3 9
程序应该输出:
***.....***
.***...***.
..***.***..
...*****...
....***....
...*****...
..***.***..
.***...***.
***.....***
(如有对齐问题,参看【图1.jpg】)
再例如,用户输入:
4 21
程序应该输出
****................****
.****..............****.
..****............****..
...****..........****...
....****........****....
.....****......****.....
......****....****......
.......****..****.......
........********........
.........******.........
..........****..........
.........******.........
........********........
.......****..****.......
......****....****......
.....****......****.....
....****........****....
...****..........****...
..****............****..
.****..............****.
****................****
【解题思路】
行是n,列是n+m-1
把整个当成一个全是 " . " 组成的二维数组,先打印这个全是点的二维数组
在把从左上到右下的” X “的那条边,由” . “ 修改成 ” * “ ,然后把从右上到左下的” X “的那条边,由” . “ 修改成 ” * “ 。
最后打印大X
【代码】
package com.hopu.真题.第六套;
import java.util.Scanner;
public class T9_打印大x {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int m=sc.nextInt();//笔的宽度
int n=sc.nextInt();//高度
char[][] c=new char[n][n+m-1];//定义数组
for (int i = 0; i < n; i++) {
for (int j = 0; j < n+m-1; j++) {
c[i][j]='.';//赋值,这个数组全部由 . 组成
}
}
for (int i = 0; i < n; i++) {//开始修改数组
for (int j = i; j < m+i; j++) {//把x的左上到右下的边由 . 修改成 *
c[i][j]='*';//赋值
}
for (int j = n+m-i-2; j > n-i-2; j--) {//把x的右上到左下的边由 . 修改成 *
c[i][j]='*';//赋值
}
}
//打印这个大X
for (int i = 0; i < n; i++) {
for (int j = 0; j < n+m-1; j++) {
System.out.print(c[i][j]);
}
System.out.println();
}
}
}