求助(为什么res=mid要和if(mid*mid*mid<n)放在一起
  • 板块灌水区
  • 楼主xinruian
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/10/13 09:40
  • 上次更新2023/11/2 14:11:22
查看原帖
求助(为什么res=mid要和if(mid*mid*mid<n)放在一起
832996
xinruian楼主2023/10/13 09:40

求助(为什么res=mid要和if(midmidmid<n)放在一起

题目链接:解立方根 - 蓝桥云课 (lanqiao.cn)

代码这样写仅仅25%

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include<iomanip>

using namespace std;

const double eps = 1e-12;

int main() {
    int t;
    cin >> t;
    while (t --) {
        double n;
        cin >> n;
        double l = 0, r = 100000;
        double res = 0;
//        cout <<'v'<< (1e-4)<<endl;
//        while (fabs(l - r) > eps) {
        while (l <= r) {        
            double mid = (l + r) / 2;
            if (fabs(mid * mid * mid - n) <= eps) {
                res = mid;
                break;
            }
            if (mid * mid * mid < n)
            {
                l = mid + 0.0001;
                
            }
            else if (mid * mid * mid > n)
                r = mid - 0.0001;
           	res = mid;
            
        }
        printf("%.3lf\n", res); 
    } 
    return 0;
}

这样写为啥就100%

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include<iomanip>

using namespace std;

const double eps = 1e-12;

int main() {
    int t;
    cin >> t;
    while (t --) {
        double n;
        cin >> n;
        double l = 0, r = 100000;
        double res = 0;
//        cout <<'v'<< (1e-4)<<endl;
//        while (fabs(l - r) > eps) {
        while (l <= r) {        
            double mid = (l + r) / 2;
            if (fabs(mid * mid * mid - n) <= eps) {
                res = mid;
                break;
            }
            if (mid * mid * mid < n)
            {
                l = mid + 0.0001;
                res = mid;
            }
            else if (mid * mid * mid > n)
                r = mid - 0.0001;
            
        }
        printf("%.3lf\n", res); 
    } 
    return 0;
}

大佬教教~org

2023/10/13 09:40
加载中...