5 solutions
-
2
若卡住 延长梯形两斜边构成一个大的等腰三角形采用相似三角形解题
#include<bits/stdc++.h> using namespace std; int main() { double r,a,b,h; cin>>r>>a>>b>>h; if(b>=2*r){ cout<<"Drop"; return 0; }else{ cout<<"Stuck"<<endl; double x=(h*b)/(a-b); double n=sqrt(h*h+(a-b)*(a-b)/4); double p=(r*n)/((a-b)/2)-x; printf("%0.10lf",p); } }
-
0
初中几何题,延长梯形斜边相交于一点,2 次三角形相似 + 勾股定理
注意除法和整型-浮点型相互转换
#include <bits/stdc++.h> using namespace std; #define DBG(x) cout << #x << "=" << x << endl void solve() { double ans = 0.0; int r, a, b, h; cin >> r >> a >> b >> h; if (b >= 2 * r) { printf("Drop\n"); } else { double t = (1.0 * b * h) / (a - b); double b1 = (1.0 * b) / 2; double v1 = pow(t, 2) + pow(b1, 2); ans = (1.0 * r * sqrt(v1)) / b1 - t; printf("Stuck\n%.10f\n", ans); } } int main() { solve(); return 0; }
-
0
#include <stdio.h> #include <math.h> int main() { double r,a,b,h;//半径,上底,下底,等腰梯形的高度。 double m,e,d; scanf("%lf %lf %lf %lf",&r,&a,&b,&h); if(2r>b){ printf("Stuck\n");//m是衍生出来的等腰三角形的高 m=bh/(a-b); e=sqrt((mm)+bb/4); d=2re/b-m; printf("%.10lf",d); }else { printf("Drop"); } return 0; }
-
0
我们延长梯形的边后可以得到一个等腰三角形。
很显然,延长部分构成的小三角形与延长部分构成的大三角形相似(两条边成比例,且角相等)
又因为相似三角形的边成比例:
所以有:a / 2 :b / 2 = x+h : x =>只有一个未知数,可以求出 x 的值;
根据 x 和 b / 2 的值 我们可以求出 延长部分小三角形的斜边值
与上面求相似三角形同理可以知道 由半径做垂线形成的三角形 与延长部分的小三角形相似!
所以有对应边成比例: r : b / 2 = (ans+x) : sqrt ( b * b / 4 + x * x) ;
一个未知数即可求出 ans ! !!
注意:粉色部分应该表示的是延长的小三角形的斜边 !
#include <stdio.h> #include <algorithm> #include <math.h> #include <vector> #include <iostream> #include <string.h> #include <queue> using namespace std; double r,a,b,h; int main() { scanf("%lf%lf%lf%lf",&r,&a,&b,&h); double z=2*r; if(z<b) printf("Drop\n"); else { double x=(b*h)/(a-b); double k=(b*b/4)+(x*x); double ans=(((2*r*sqrt(k))-x*b)/b); printf("Stuck\n"); printf("%.10lf\n",ans); } return 0; }
-
0
#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #include<cstring> using namespace std; int main(void) { int a,b,h,r; cin>>r>>a>>b>>h; if(b>=2*r) { cout<<"Drop"; return 0;//如果....就结束 } else { double thir=sqrt(h*h+(a-b)*(a-b)*1.0/4);//“h”为直角边的三角形的第三边 double k1=thir/(a-b)*2;//相似比1 double len1=r*k1;//最大三角形的第三边 double k2=h*1.0/(a-b)*2;//相似比2 double len2=b*1.0/2*k2;//另一个三角形的一直角边 double len=len1-len2;//相减即为所求的“?” cout<<"Stuck"<<endl; printf("%.10f",len);//题中要求保留10位小数 } return 0; }
补全三角形,用相似三角形来做
- 1
Information
- ID
- 127
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 4
- Tags
- # Submissions
- 146
- Accepted
- 65
- Uploaded By