列表

详情


NC207502. 有趣的圆柱体

描述

在计算机中绘制圆柱体时,一般是用正棱柱来代替,当越大时,绘制的图像看起来就越像圆柱体,如下图所示:
                                           
                                                                                   
在三维空间中,给定正棱柱的个顶点坐标(无序,为偶数),棱柱的上底面和下底面的中心连线平行于某一个坐标轴,计算该棱柱的最小外接圆柱体体积。
保证圆柱体满足,。(为上下底面半径,为高)

输入描述

第一行输入一个正整数,代表数据的组数。
接下来输入一个整数
接下来行,每行输入3个数,代表棱柱上一个顶点的坐标。

输出描述

输出一个浮点数,表示圆柱体的体积,结果保留六位小数,最大浮点误差为

示例1

输入:

1
6
1.000000000 0.000000000 0.000000000
0.500000000 0.866025404 0.000000000
-0.500000000 0.866025404 0.000000000
-1.000000000 0.000000000 0.000000000
-0.500000000 -0.866025404 0.000000000
0.500000000 -0.866025404 0.000000000
1.000000000 0.000000000 3.000000000
0.500000000 0.866025404 3.000000000
-0.500000000 0.866025404 3.000000000
-1.000000000 0.000000000 3.000000000
-0.500000000 -0.866025404 3.000000000
0.500000000 -0.866025404 3.000000000

输出:

9.424778

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 5ms, 内存消耗: 488K, 提交时间: 2020-06-06 14:39:24

#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define pi 3.1415926535
using namespace std;
double a[60];
double q,w,r;
double ll(double x,double y,double z){
	return sqrt((x-q)*(x-q)+(y-w)*(y-w)+(r-z)*(r-z));
}
int main(){
	int t;cin>>t;
	while(t--){
		int n;cin>>n;
		cin>>q>>w>>r;
		for(int i=1;i<=2*n-1;i++){
			double x,y,z;
	//		scanf("%f %f %f",&x,&y,&z);
			cin>>x>>y>>z;
			a[i]=ll(x,y,z);
		}
		sort(a+1,a+2*n);
		a[n-1]=a[n-1]/2;
		printf("%.6f\n",a[n-1]*a[n-1]*pi*a[n]);
	}
	return 0;
}

C++11(clang++ 3.9) 解法, 执行用时: 8ms, 内存消耗: 468K, 提交时间: 2020-06-08 10:34:38

#include<bits/stdc++.h>
using namespace std;
#define _USE_MATH_DEFINES
double x[65],y[65],z[65],d[65];
int t,n;
double pi=M_PI;
double cul(double d,double h)
{
	return pi*h*d*d/4;
}
double f(int i)
{
	return sqrt(x[i]*x[i]+y[i]*y[i]+z[i]*z[i]);
}
int main()
{
	cin>>t;
	while(t--)
	{
		cin>>n;
		cin>>x[0]>>y[0]>>z[0];
		for(int i=1;i<2*n;i++)
		{
			cin>>x[i]>>y[i]>>z[i];
			x[i]-=x[0];
			y[i]-=y[0];
			z[i]-=z[0];
			d[i]=f(i);
		}
		sort(d+1,d+2*n);
		printf("%.6f\n",cul(d[n-1],d[n]));
	}
	return 0;
}

上一题