r=mid改为r=mid-0.0001;为什么也可以过?
查看原帖
r=mid改为r=mid-0.0001;为什么也可以过?
1114211
leeon666楼主2024/7/24 11:36

为什么把r=mid和l=mid;改为r=mid-0.0001;和l=mid+0.0001;后依然可以AC,这样程序运行过程有什么区别呢???

#include<bits/stdc++.h>
#define ll long long
using namespace std;

int n,w,m;
double ans;

void out(double x){
	printf("%.1f",x*100);
	exit(0);
}

double check(double mid){
	double tot=n;
	for(int i=1;i<=m;i++){
		tot=tot*(1+mid)-w;
	}
	return tot;
}

int  main()
{
	cin>>n>>w>>m;
	double l=0,r=5,mid;
	while(r-l>=0.0001){
		mid=(l+r)/2.0;
		ans=mid;
		double temp=check(mid);
		if(temp==0){
			out(ans);
		}else if(temp>0){
			r=mid;
		}else if(temp<0){
			l=mid;
		}
	}
	out(ans);
	return 0;
}

2024/7/24 11:36
加载中...