问题:
编写代码输出以下图形
*
* *
* *
* *
* * *
看起来是不是很简单
直接暴力法破解,
public static void main(String[] args){
//暴力
System.out.println(" "+"*");//前面四个空格加上一个*
System.out.println(" "+"*"+" "+"*");//前面三个空格加上一个*再空一个再加上一个*
System.out.println(" "+"*"+" "+"*");//前面两个空格加上一个*再空三个再加上一个*
System.out.println(" "+"*"+" "+"*");//前面一个空格加上一个*再加上五个空格再加上一个*
System.out.println("*"+" "+"*"+" "+"*");//前面0个空格加上*加上三个空格再加上一个*再加上三个空格再加上一个*
}
延申
4个三角形怎么弄出来。N*N个三角形呢?
分析:
输出1,显示一个三角形
输出2,显示4个三角形
输出3,显示9个三角形
.....
输出n,显示出n*n个三角形
规律
输入1,第一个三角形:
* 前面空了4个空 * 第1行
* * 前面空了3个空 * +1个空格 +* 第2行
* * 前面空了2个空 *+3个空格+* 第3行
* * 前面空了1个空 *+5个空格+* 第4行
* * * 前面空了0个空 *+3个空格+*+3个空格+* 第5行
输入2,展现4个三角形
* 前面空了8个空 * 第1行
* * 前面空了7个空 * +1个空格 +* 第2行
* * 前面空了6个空 *+3个空格+* 第3行
* * 前面空了5个空 *+5个空格+* 第4行
* * * 前面空了4个空 *+3个空格+*+3个空格+* 第5行
* * * * 前面空了3个空 * +1个空格 +*+5个空格+*+1个空格+* 第6行
* * * * 前面空了2个空 *+3个空格+*+3个空格+* +3个空格+* 第7行
* * * * 前面空了1个空*+5个空格+* +1个空格 +*+5个空格+* 第8行
* * * * * 前面空了0个空*+3个空格+*+3个空格+* +3个空格+*+3个空格+*
第9行
规律
输出n 行数为4*n+1 前面空格最多的时候为2*n
第一行: 空格2*n+*
第二行: 空格2*n-1+* +1个空格+*
第三行: 空格2*n-2 *+3个空格+*
第四行: 空格2*n-3 *+5个空格+*
第5行: 空格2*n-4 *+3个空格+*+3个空格+*
.....
总结
分奇数偶数进行讨论:
输出为i,行数为j,j的最大值为4*i+1 ,C为2*i
j为奇数,输出 c-2*(j/2)个空格+*+ (j-1)/2个(3个空格+* )
j为偶数,分为两种
第一种:j%4==0
输出2*c-2*(j/2)+1个空格+*+j/4-1个(1个空格 +*+5个空格+*)
第二种:j%4!=0
输出2*c-2*(j/2)+1个空格+*+1个空格 +*+j/4个(5个空格+*+1个空格+* )
最终代码
public static void f(int x)
{
/**
* 参数名称
* x为输出的数
* c为空格的数量
*/
int c=2*x;
for(int j=1;j<=4*x+1;j++) {
if(j%2==1){//奇数部分
for(int d=1;d<=2*c-2*(j/2);d++){
System.out.print(" ");
}
System.out.print("*");
for(int y=1;y<=(j-1)/2;y++) {
System.out.print(" "+"*");
}
System.out.print("\n");
}
else{//偶数部分
if(j%4==0) {
for(int d=1;d<=2*c-2*(j/2)+1;d++){
System.out.print(" ");}
System.out.print("*"+" "+"*");
for(int y=1;y<=j/4-1;y++) {
System.out.print(" "+"*"+" "+"*");
}
System.out.print("\n");
}
else{
for(int d=1;d<=2*c-2*(j/2)+1;d++){
System.out.print(" ");}
System.out.print("*"+" "+"*");
for(int y=1;y<=j/4;y++) {
System.out.print(" "+"*"+" "+"*");
}
System.out.print("\n");
}
}
}
}