本帖最后由 e10my 于 2014-5-27 15:53 编辑
@author e10my
这道题我用部分数学算法代替了其中一个for循环。关于效率还望各位测试。
代码可能比较麻烦,思路是这样的
根据菱形行坐标X以及纵坐标Z 来计算出符合打印出菱形的条件。
使用if控制条件,如果满足这样的条件,则打印出* 否则打印出“ ”
控制条件各位可以自己思考。
- /*
- 打印菱形
- 菱形可拆分为四个三角形来实现,上半部分可看作是一个倒三角形和一个正三角形,
- 下半部分可看作是一个正三角形和一个倒三角形。
- */
- class Demo
- {
- public static final int UP=8; //上棱行数
- public static final int D = UP%2;
- public static void main(String[] args)
- {
- diamond();
- }
- //打印菱形方法
- public static void diamond()
- {
- int E = 0;
- if(D == 0)
- E = 1;
- for(int x=1; x<=UP; x++)
- {
-
- //上半部分正三角打印
- for(int z=1; z<=(2*UP); z++)
- {
- if((z-x)<=UP && (z+x)>=UP && (z+x-UP-1)%2 == E)
- System.out.print("*");
- else
- System.out.print(" ");
- }
- System.out.println();
- }
- for(int x=1; x<=UP-1; x++)
- {
- //下半部分倒三角打印
- for(int z=1; z<=(2*UP); z++)
- {
- if((z-x)%2 == D && (z+x)<=2*UP && (z-x)>0)
- System.out.print("*");
- else
- System.out.print(" "); }
- System.out.println();
- }
- }
- }
复制代码
updata:非常抱歉,我的代码比毕老师的代码要慢了一倍。如图所示。我自己已经无能为力了,待我上google搜罗搜罗其他代码比较。
|
|