UVa 375 Inscribed Circles and Isosceles Triangles
2026/6/3 13:26:03 网站建设 项目流程

题目描述

给定两个实数:

  • BBB:等腰三角形底边的宽度(英寸)
  • HHH:等腰三角形的高(英寸)

计算一系列内切圆的周长之和,这些圆从底边到顶部依次堆叠:

  • 最低的内切圆与底边和两腰相切
  • 下一个更高的内切圆与下方的内切圆和两腰相切
  • 依此类推,直到最小圆的半径小于0.0000010.0000010.000001

输入格式

第一行是一个正整数nnn,表示测试用例的数量。每个测试用例一行,包含两个正实数BBBHHH

输出格式

对于每个测试用例,输出一个实数(121212位有效数字,其中666位小数),表示所有内切圆周长之和。

样例输入

1 0.263451 0.263451

样例输出

0.827648

题目分析

问题的本质

这是一个几何级数求和问题。在等腰三角形中,从底边开始依次向上堆叠内切圆,每个圆都与两腰相切,并与下方的圆相切。需要计算所有圆的周长之和。

几何关系

等腰三角形的底边BBB,高HHH,腰长L=(B/2)2+H2L = \sqrt{(B/2)^2 + H^2}L=(B/2)2+H2

第一个圆(最低):

  • 内切于等腰三角形,圆心在角平分线交点上
  • 半径r1=B×HB+4H2+B2r_1 = \frac{B \times H}{B + \sqrt{4H^2 + B^2}}r1=B+4H2+B2B×H

后续圆

  • 每个新的圆都内切于上方剩余的小等腰三角形
  • 新三角形与原三角形相似
  • 半径递减比例恒定

半径递推关系

设第iii个圆的半径为rir_iri,其对应的等腰三角形高为HiH_iHi,底边为BiB_iBi。由相似性:
ri+1ri=Hi−2riHi+2ri \frac{r_{i+1}}{r_i} = \frac{H_i - 2r_i}{H_i + 2r_i}riri+1=Hi+2riHi2ri

迭代终止条件

r<0.000001r < 0.000001r<0.000001时停止。


参考代码

// Inscribed Circles and Isosceles Triangles// UVa ID: 375// Verdict: Accepted// Submission Date: 2016-07-03// UVa Run Time: 0.040s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;constdoublePI=2*acos(0.0);intmain(intargc,char*argv[]){ios::sync_with_stdio(false);doublen,B,H,sumOfR,r;cin>>n;cout<<fixed<<setprecision(6);for(inti=1;i<=n;i++){cin>>B>>H;// 测试用例间空行if(i>1)cout<<endl;sumOfR=0.0;// 第一个内切圆半径r=H*B/(B+sqrt(4*H*H+B*B));// 累加半径直到小于阈值while(r>=0.000001){sumOfR+=r;H-=2*r;// 剩余三角形高度r=r*H/(H+2*r);// 下一个圆的半径}// 输出周长之和,右对齐 13 位cout<<right<<setw(13)<<(2.0*PI*sumOfR)<<endl;}return0;}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询