【JavaScript】7-18 二分法求多项式单根 (20分)

题目:

 

 输入格式:

输入在第1行中顺序给出多项式的4个系数a3​​、a2​​、a1​​、a0​​,在第2行中顺序给出区间端点a和b。题目保证多项式在给定区间内存在唯一单根。

输出格式:

在一行中输出该多项式在该区间内的根,精确到小数点后2位。

输入样例:

3 -1 -3 1

-0.5 0.5

 

 

 

输出样例:

0.33

 

 

JavaScript代码:

var readline = require('readline');

var readlineTest = readline.createInterface({    
    input: process.stdin,
    output: process.stdout    
});

var lineCounts=2;//输入的行数,参数写死
var tempArray=[];//创建数组来存储每一行的数据
var tempArrayIndex=0;//初始化数组的索引

readlineTest.on('line', function(line){
    
    //将每一行的内容添加至数组tempArray
    tempArray[tempArrayIndex]=line;
    tempArrayIndex++;
    //当已输入的行数达到最大输入的行数时,结束readline.Interface实例
    if(tempArray.length==lineCounts){
        var line1 = tempArray[0].split(' ')
        var line2 = tempArray[1].split(' ')
        var a3 = parseFloat(line1[0])
        var a2 = parseFloat(line1[1])
        var a1 = parseFloat(line1[2])
        var a0 = parseFloat(line1[3])
        var a = parseFloat(line2[0])
        var b = parseFloat(line2[1])
                
        var ret = sep(a3,a2,a1,a0,a,b)    
        console.log(ret)
        readlineTest.close();
    }
    
});

//当readlineTest执行'close'命令时,输入流关闭,程序结束。
readlineTest.on('close', function() {    
    process.exit(0)
});

function sep(a3,a2,a1,a0,a,b) {
    var left = a
    var right = b 
    
    while(right - left >= 0.01) {
        var mid = (left + right) / 2
        if(f(a3,a2,a1,a0,mid) == 0){
            break
        }
        
        if(f(a3,a2,a1,a0,mid) * f(a3,a2,a1,a0,left) < 0) {
            right = mid
        } else {
            left = mid
        }
    }
    
    return ((left + right) / 2).toFixed(2)
}

function f(a3,a2,a1,a0,x) {
    var fun = a3 * x * x * x + a2 * x * x + a1 * x + a0
    return fun
}

 

posted @ 2021-01-25 16:41  moonskies  阅读(114)  评论(0编辑  收藏  举报