C. Naming Company 几何
题目大意:
一个胡萝卜是个等腰三角形,底边长是1,高是h,要切成n段,每一刀切的时候平行底边((2 ≤ n ≤ 1000, 1 ≤ h ≤ 105),分给n个兔子,每个兔子一段,每一段面积相等,让你分别求出n-1刀切得位置距离顶部的距离,并输出;
如图所示:
基本思路:
设第i次切距离顶部距离为h(i),设s为切前i次的上面等腰三角形的面积,那么s=h(i)*h(i)/(h*n);(根据相似三角形求出),又因为每一段面积相等,所以s=i*h/(n*2);则h(i)=h*sqrt(i/n);
不过需要注意,我也不知道为啥,当把下面程序中用cin输入的改为scanf就会输出乱码,真心不懂啊;
代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long double ld;
int main()
{
int n;
ld h;
cin>>n>>h;
cout<<setprecision(20);
for(int i=1;i<n;i++)
{
ld temp=h*sqrt((ld)i/((ld)n));
cout<<temp<<" ";
}
}