【FOJ】Problem 1077 铁皮容器

Problem 1077 铁皮容器.

题意

圆柱,有盖,表面积1000平方厘米,已知容积(体积),求最小底面半径(小数点后一位),无解输出NO

思路

这是数学题???

  • 列公式化简:V=500r-πr3,有解即f(x)=500x-πx3-V与x轴有交点
  • 求导判断单调性,导数500-3πx2,知道f(x)先单调增加,在x=(500/3π)1/2处取到极大值,后单调递减
    ①如果代入V和极大值,f(x)<0,则无解
    ②f(x)>=0则有解,x从极大值点向左按0.01递减,直到出现f(x)<0,x+0.01即为所求的最小半径
    我发现隔壁人家枚举直接举出来了!!!!!
    我到底为什么要求导!!!!!

笔记

  • 我竟然不会解一元三次方程(……)
  • 一开始用0.1,精度不够,1000算出来2.0,就把递减值改小了
  • 一直在纠结f=0的情况,可是实际上这个都是double的,各种小数,很难等0吧,只要精确度够小估算值应该都能通过测试

代码

#include<cstdio>
#include<math.h>
double pi=acos(-1);

int main(){
	double x, max, f;
	int V, k;
	scanf("%d", &k);
	max = sqrt(500.0/(3*pi));
	while(k--){
		scanf("%d", &V);
		f = 500*max - pi*pow(max, 3.0) - V;
		if(f<0){
			printf("NO\n");
			continue;
		}
		for(x=max-0.001; f>0; x-=0.001)
			f = 500*x - pi*pow(x, 3.0) - V;
		printf("%.1f\n", x+0.001);
	}
	return 0;
}
发布了28 篇原创文章 · 获赞 0 · 访问量 327

猜你喜欢

转载自blog.csdn.net/qq_44531167/article/details/105150712