Rss & SiteMap

课外天地 李树青 http://www.njcie.com

李树青 论坛 南京 财经 课外天地
共1 条记录, 每页显示 10 条, 页签: [1]
[浏览完整版]

标题:程序代码——打印菱形

1楼
admin 发表于:2006/2/26 21:35:42

public class exec
{
   public static void main( String args[] )
   {
                String s=javax.swing.JOptionPane.showInputDialog("Num");
                int i=Integer.parseInt(s);
                for(int c=0;c<i;c++)
                {
                        for(int d=0;d<Math.abs(c-i/2);d++)
                                System.out.print(" ");  
                        
                        for(int d=0;d<i-2*Math.abs(c-i/2);d++)
                                System.out.print("*");
                        System.out.print("\n");                
                }
                
                System.exit(0);
   }
}

说明:
此程序最大的难点在于设计小循环的次数,需要仔细的分析,找出规律。
以7次为例:
大循环           第一次小循环(空格)    第二次小循环(星号)
0                 3                               1
1                 2                               3
2                 1                               5
3                 0                               7
4                 1                               5
5                 2                               3
6                 3                               1

一般而言,象第一次小循环(打印空格)这种由大变小,再由小变大的数据变化过程可以用求一个数值的绝对值来表达,当数值从正数逐渐过渡到0,在从0逐渐过渡到负数是,它的绝对值将会产生上述情形。
所以,第一次小循环的循环次数为:Math.abs(c-i/2)

至于由小变大,再由大变小的情形与上述相反,可以断定两种情形下数值的和应该为常量,即为一个常量减去上述情形下的数值就为此时的数值。至于二倍的递增关系,可以考虑使用乘以2的方式来表达。
所以,第二次小循环的循环次数为:2*((i+1)/2-Math.abs(c-i/2))-1
化简为:i-2*Math.abs(c-i/2)

[此贴子已经被作者于2010-12-12 07:39:52编辑过]
共1 条记录, 每页显示 10 条, 页签: [1]

Copyright ©2002 - 2016 课外天地.Net
Powered By Dvbbs Version 8.3.0
Processed in .03125 s, 2 queries.