问题描述
给定正方形边长width,如图按规律输出层层嵌套的正方形图形。
注意,为让选手方便观看,下图和样例输出均使用“”代替空格,请选手输出的时候使用空格而不是“”。
width=6:
输入格式
仅一行一个整数width。
输出格式
按规律输出图形,不要输出多余空格。
样例输入
10
样例输出
数据规模和约定
width满足width=4n+2,n为正整数。
且width<=50。
看到此题,小编第一反应是找规律,首先整体而言,第i行和倒数i行一样,则可以试着用递归来保持这个特征,这样观察n行就换成观察n/2行的问题了;
再者,观察奇数行,总是以 i/2 个 *- 开头,i/2 个 -结尾,其余是 若干个 ;偶数行:总是以 i/2 个 *- 开头,i/2 个 -*结尾,其余是 若干个-
package Main;
import java.util.*;
public class Main {
public static void main(String []args) {
Scanner input=new Scanner(System.in);
int a=input.nextInt();
hua(1,a);
}
public static void hua(int b,int a) {
if(b<=a/2)
{
if(b%2==1) {
for(int i=1;i<=b/2;i++)
System.out.print("* ");
for(int i=1;i<=a-4*(b/2);i++)
System.out.print("*");
for(int i=1;i<=b/2;i++)
System.out.print(" *");
System.out.println();
}
else {
for(int i=1;i<=b/2;i++)
System.out.print("* ");
for(int i=1;i<=a-4*(b/2);i++)
System.out.print(" ");
for(int i=1;i<=b/2;i++)
System.out.print(" *");
System.out.println();
}
hua(b+1,a);
if(b%2==1) {
for(int i=1;i<=b/2;i++)
System.out.print("* ");
for(int i=1;i<=a-4*(b/2);i++)
System.out.print("*");
for(int i=1;i<=b/2;i++)
System.out.print(" *");
System.out.println();
}
else {
for(int i=1;i<=b/2;i++)
System.out.print("* ");
for(int i=1;i<=a-4*(b/2);i++)
System.out.print(" ");
for(int i=1;i<=b/2;i++)
System.out.print(" *");
System.out.println();
}
}
}
}
在这里插入代码片