问题描述
给定正方形边长width,如图按规律输出层层嵌套的正方形图形。
注意,为让选手方便观看,下图和样例输出均使用“”代替空格,请选手输出的时候使用空格而不是“”。
width=6:
输入格式
仅一行一个整数width。
输出格式
按规律输出图形,不要输出多余空格。
样例输入
10
样例输出
数据规模和约定
width满足width=4n+2,n为正整数。
且width<=50。
资源限制
时间限制:1.0s 内存限制:256.0MB
思路:
这题不是很难,我在开始做的时候想的比较复杂,被题目最后给的width = 4n+2给误导了,我本以为这是某个关系表达式,后来才发现屁点关系都没有,要说有,那就是用来误导做题者的(本人认为)。
通过题目的名字可以知道,通过输入一个边长,打印一个相互嵌套的正方形,如图
然后我们可以分别打印四条边,由外向内打印就可以了< _ >
代码块:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int width = sc.nextInt();
char a[][] = new char[width][width];
for(int i = 0; i < width; i++){
for(int j = 0; j < width; j++){
a[i][j] = ' ';
}
}
f(a, 0, width-1);
for(int i = 0; i < width; i++){
for(int j = 0; j < width; j++){
System.out.print(a[i][j]);
}
System.out.println();
}
}
static int f(char a[][], int start, int end){
//判断出口
if(start > end)return 0;
//上边
for(int i = start; i <= end; i++){
a[start][i] = '*';
}
//下边
for(int i = start; i <= end; i++){
a[end][i] = '*';
}
//左边
for(int i = start; i <= end; i++){
a[i][start] = '*';
}
//右边
for(int i = start; i <= end; i++){
a[i][end] = '*';
}
return f(a, start+2, end-2);
}
}
评测结果: