设这四个数字为a,b,c,d他们都是在(0,7.11]中的数。
此外设x,y为两个实数.先找到满足x+y=7.11和x*y=7.11的数字.这个不难吧.由于都是正实数,所以0<x<=7.11&&0<y<=7.11。可以直接列举出来。
作出的假设一组结果为X和Y
可以设a+b=X&&a*b=X用上边同样的方法可以找到a和b.
同理设c+d=Y&&c*d=Y一样得到c和d.
最后得到的a,b,c,d就是所求的结果。
具体的语言实现很简单了!

解决方案 »

  1.   

    实在不好意思,我是一楼的,昨天没有仔细的看问题,疏忽了!那种算法是在其中比较特殊的例子而已,是特殊情况!因为以前做个类似的算法.在这里给大家造成的不便.表示歉意!
    这个题目我的思路首先想到的是算法的时间复杂度问题,因为蛮力法太耗时间了
    具体的算法见下面,这个考题不是考的算法问题,而是计算机系统结构与组成.这个涉及到了浮点数的乘法问题了!
    C++ 6.0的代码如下:
    #include<iostream.h>
    #include<math.h>
    void main(){
    double a,b,c,d;
    int count=0;
    for(a=0.01;a<7.11;a=a+0.01){
    for(b=0.01;b<7.11;b=b+0.01){
    for(c=0.01;c<7.11;c=c+0.01){
    d=7.11-a-b-c;
    if(d>0&&fabs((a*b*c*d)-7.11)<=0.00000001){
    cout<<a<<'\t'<<b<<'\t'<<c<<'\t'<<d<<endl;
    count++;
    }
    }
    }
    }
    cout<<count<<'\t';
    }
    后面的计数器最后运行出来是24为4!.也就是一组数据的不同排列!
    if(d>0&&fabs((a*b*c*d)-7.11)<=0.00000001)在这个if选择结构中,不可以直接用数学上的a*b*c*d==7.11或者(a*b*c*d)-7.11==0之类的.这也就是考点!昨天没有注意这个问题,给大家造成的不便我向大家表示歉意
      

  2.   

    如果改变if语句中的小数值如改为0.00001之类的,会出现许多近似的解.要是太小了会产生数据溢出下限的!在C#里可以用同样的方法实现,我一样实验过了!
    这里改用逼近的数学方法,而不能用直接的数学方法!