首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

一个简单的算法.有关问题.

2012-01-10 
一个简单的算法..问题..classSM{publicstaticvoidmain(String[]args){doublea0.0,b0.0,c0.0,d0.0Syst

一个简单的算法..问题..
class   SM
{
    public   static   void   main(String[]   args)
    {
        double   a=0.0,b=0.0,c=0.0,d=0.0;
        System.out.println( "Result   as   fallows: ");
//for   part-----------------------
        System.out.println( "\t--for-- ");
        for(a=0.0;a <=8.0;a+=0.5)
        {
            for   (b   =   0.0;   b   <=   8.0;   b   +=   0.5)
            {
                for   (c   =   0.0;   c   <=   8.0;   c   +=   0.5)  
                {
                    d   =   8.0   -   a   -   b   -   c;
                    if   (a   *   b   *   c   *   d   ==   8.0   &&   a   +   b   +   c   +   d   ==   8.0)  
                    {
                        System.out.print( "==> > :     ");
                        System.out.println( "a= "   +   a   +   ",b= "   +   b   +   ",c= "   +   c   +   ",d= "   +   d);
                        //System.exit(0);
                    }
                }
            }
        }
//while   part-----------------------
        System.out.println( "\t--while-- ");
        a   =   0.0;
        while   (a   <=   8.0)  
        {
            b   =   0.0;
            while(b   <=   8.0)
            {
                c   =   0.0;
                while(c   <=   8.0)
                {
                    d   =   8.0   -   a   -   b   -   c;
                    if   (a   *   b   *   c   *   d   ==   8.0   &&   a   +   b   +   c   +   d   ==   8.0)  
                    {
                        System.out.print( "==> > :     ");
                        System.out.println( "a= "   +   a   +   ",b= "   +   b   +   ",c= "   +   c   +   ",d= "   +   d);


                        System.exit(0);
                    }
                    c+=0.1;
                }
                b+=0.1;
            }
            a+=0.1;
        }
    }
}

上面代码都是想要找出abcd的和与积都等于8的四个数

就好像   1   1   2   4   四个数   1+2+1+4=1*2*1*4=8

但是出现一个问题就是:

无论用for还是while循环,当a+=1.0步进和a+=0.5     0.25   步进

(也就是for(a=0.0;a <=8.0;a+=0.5){})

都可以求出结果就是

a=1.0,b=1.0,c=2.0,d=4.0   以及位置互换,

但如果将步进改成0.2   或   0.1   就得不到结果..这是为什么??

在C++里也是同样的问题!!救救..............

[解决办法]
有些小数不能精确表示的
建议用Math.abs(a * b * c * d) -8 <0.0000001
Math.abs(a + b + c + d)-8 <0.0000001

热点排行