读书人

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

发布时间: 2012-01-10 21:26:50 作者: rapoo

一个简单的算法..问题..
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

读书人网 >J2SE开发

热点推荐