原题传送门:Cutting Carrot
不难看到,本题考查了一些和相似三角形有关的数学知识,在这里,我们先做一些数学上的推导。
一、金字塔模型(初中课内内容)
1. 相似三角形预备定理
如图,在 △ A B C \triangle ABC △ABC中, B 1 C 1 ∥ B C B_1C_1 \parallel BC B1C1∥BC,则 △ A B 1 C 1 ∼ △ A B C \triangle AB_1C_1 \sim \triangle ABC △AB1C1∼△ABC
2. 推论
由相似三角形间的面积关系,我们假设 B C B 1 C 1 = A B A B 1 = A C A C 1 = k \dfrac {BC}{B_1C_1}=\dfrac{AB}{AB_1}=\dfrac{AC}{AC_1}=k B1C1BC=AB1AB=AC1AC=k,则 S △ A B C S △ A B 1 C 1 = k 2 . \dfrac{S_{\triangle ABC}}{S_{\triangle AB_1C_1}}=k^2. S△AB1C1S△ABC=k2.根据题目中的要求,我们要把整个大三角形分成面积相等的 n n n部分,也就是说,每部分的面积均为原三角形面积的 1 n . \dfrac 1n. n1.因此,第 i i i层的三角形面积就是原三角形面积的 i n . \dfrac in. ni.
由刚才得到的推论,原三角形与第 i i i层的三角形的相似比为 n i . \sqrt{\dfrac ni}. in.也就是说,它们对应的高度比也就是 n i . \sqrt{\dfrac ni}. in.因此, h i = h k = h n i = h 2 i n . h_{i}=\dfrac {h}{k}=\dfrac{h}{\sqrt{\dfrac ni}}=\sqrt\dfrac{h^2i}{n}. hi=kh=inh=nh2i.这样对i循环便可以得到代码:
二、代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n,height;
cin>>n>>height; // 读入
for(int i=1; i<=n-1; i++) {
cout<<fixed<<setprecision(12)<<sqrt((1ll*height*height*i*1.0)/n)<<" "; // 设置输出格式,计算
}
return 0;
}