算法训练 正六边形(JAVA实现)
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
由键盘输入一个自然数n(2<=100) 编程打印如图所示的正六边形(n为边长)。其中每条边上含有n个*号。
输入格式
一行:包含一个正整数n(2<=100)。
输出格式
题目要求的图形。
样例输入
5
样例输出
数据规模和约定
2<=n<=100。
提示:从标准输出设备的第一行开始,图形左边顶点靠左边。
可能是我想复杂了吧,我把图像分成了两个部分,分成了前n行 和后n-1行来分开分析的
如下:
import java.util.Scanner;
public class Main {
public static void main(String[]args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i = 1; i < n + 1; i++){ //i控制行
if(i == 1) { //第一行
for (int j = 1; j < n; j++) { //先输出空格
System.out.print(" ");
}
for (int j = 1; j < n + 1; j++) { //再输出*
System.out.print("*");
}
System.out.println();
}
else{ //第一行之后的前n行(整个图像的上半部分)
for(int j = 1; j < n - i +1 ; j ++){ //输出空格
System.out.print(" ");
}
System.out.print("*"); //只输出一个*
for(int j = 1; j < n +(i - 1)*2 - 1 ;j++){ //输出空格
System.out.print(" ");
}
System.out.println("*"); //再输出一个*
} //至此,图像上半部分输出完毕,下半部分就是对称
} //注意 i又从1开始
for(int i = 1 ; i < n ; i++){ //i控制行
if(i == n - 1) { //输出图像最后一行
for (int j = 1; j < n; j++) {
System.out.print(" ");
}
for (int j = 1; j < n + 1; j++) {
System.out.print("*");
}
System.out.println();
}
else{
for(int j = 1; j < i +1 ; j ++){
System.out.print(" ");
}
System.out.print("*");
for(int j = 1; j < 3*n - 2*i -3; j++){
System.out.print(" ");
}
System.out.println("*");
}
}
}
}
哎嘿,值得纪念的一道题嘿嘿嘿2020.11.15-2021.11.15