算法设计与分析基础【第三版】习题1.1 4

算法设计与分析基础 习题1.1 4

设计一个[√n]的算法,n是任意正整数。除了赋值和比较运算,该算法只能用到基本的四则运算。


代码实现:

#include "iostream"
using namespace std;
double n;
double x;
int main(){

    cin>>n;
    double head=0,tail=n;
    x=n/2;
    if(x*x-n>=0)tail=x;
    else if(x*x-n<=0)head=x;

    while(tail-head>0.000001)
    {
        x=head+(tail-head)/2;

        if(x*x-n>=0)tail=x;
        else if(x*x-n<=0)head=x;
    }
    cout<<x<<endl;
}

前设·题目并没有限定精确度,这里默认0.000001。
设计思路:二分法
具体算法实现:可以确定的是n必然可以作为 目标解范围的右端点,另外一端标记为0.接着根据二分法的思想一步步把目标解的范围缩小 利用f(中间点)的正负来替换目标解范围的左右端点值 经过有限次循环即可将范围限定在给定精确度内。

猜你喜欢

转载自blog.csdn.net/stupid_dernier/article/details/79521992