牛牛的三角形
分析:
1.题目意思就是输出一组能组成三角形的数,前提要在数组里面选
2.由于数据很大,所以我们用long long去定义数组
3.初中知识,满足任意两边之和大于第三遍就可以,寻找之前要排序!!!,只要找到一组数据就输出return 0就行。
4.记住数组不能越界访问!
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 10;
long long a[maxn];
int main()
{
int n;
while (~scanf("%d", &n))
{
for (int i = 1; i <= n; ++i)
scanf("%lld", &a[i]);
sort(a + 1, a + n + 1);
for (int i = 1; i <= n - 2; ++i)
{
if (a[i] + a[i + 1] > a[i + 2])
{
cout << a[i] << ' ' << a[i + 1] << ' ' << a[i + 2] << endl;
return 0;
}
}
cout << "No solution" << endl;
}
}
牛牛的鱼缸
分析
相似三角形原理
分两种情况讨论
1.水少形成一个三角形
2.水多形成一个
#include <bits/stdc++.h>
using namespace std;
int main()
{
double h, l, H, L;
scanf("%lf%lf%lf%lf", &h, &l, &H, &L);
if (h * L <= H * l)
printf("%.8f\n", h * h * L / (2 * H));
else
printf("%.8f\n", (2 * h * L * l - H * l * l) / (2 * L));
return 0;
}
XP的三角形
题目描述
XP最喜欢的图形是三角形,最近他在研究直角三角形,他想到这么一个问题,如果三边长{a,b,c}均为整数的直角三角形周长为p,(a<=b<=c)当p = 120时,恰好存在三个不同的解:{a=20,b=48,c=52}, {a=24,b=45,c=51}, {a=30,b=40,c=50}。现在给定一个p求不同的解的个数。(p<=1000)
输入
单组输入数据
p
输出
输出一行结果
样例输入
120
样例输出
3
题目分析
- 如果直接三层for循环暴力枚举,不仅耗时而且做了许多的无用功
- 我们都知道第三条边可以由另外两条边来判断,这样就减少了一层循环
- 由于斜边是最长的边,且根据三角形三边和的关系,我们知道斜边i的范围是[1,p/2),这样一来循环的次数就减少了很多
- 再枚举第二条边j,显而易见第二条边的范围是[1,i),因为它不可能超过斜边,同理,第三条边就是(p-i-j)为了避免重复,保证第三条边的边长小于第二条边
- 直角三角形公式i * i=j * j +k*k
AC代码
#include <bits/stdc++.h>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;
int main()
{
int p;
while (~scanf("%d", &p))
{
int ans = 0;
for (int i = 1; i < p / 2; ++i)
{
//枚举斜边
for (int j = 1; j < i; ++j)
{
int k = p - i - j;
if (k <= j)
{
if (j * j + k * k == i * i)
++ans;
}
}
}
printf("%d\n", ans);
}
return 0;
}
感恩母亲节~
不要在遥远的距离中割断了真情,不要在日常的忙碌中遗忘了真情,不要在日夜的拼搏中忽略了真情 |
---|