华为笔试:直角三角形个数

Posted Fzu_LJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了华为笔试:直角三角形个数相关的知识,希望对你有一定的参考价值。

题目描述:

给定三角形周长p,求满足边长为整数且周长为p的直角三角形个数。

 

思路分析:

枚举的思想。首先想到就是利用一个双重循环:

for(int i=1; i<p; i++)
{
    for(int j=i; j<p; j++)
    {
        int k = p-i-j;
        if(i*i+j*j==k*k)
            ans++;
    }
}

但这样是会超时的,通过数学方式做分析:

i+j+k=p, 0<i<=j<k, 通过解不等式,可以得到:i<p/3, j<p/2。

在双重循环的基础上,做限制,能够通过,但仍可以进一步优化。

 

一重循环:

考虑两个方程:

i+j+k=p, i^2+j^2 = k^2。

j = p-p^2/(2p-2i)。

 

代码:

 1 #include<iostream>
 2 #include<algorithm>
 3 #include<vector>
 4 using namespace std;
 5 
 6 int main(){
 7     int p;
 8     cin>>p;
 9     int ans=0;
10     for(int i=1; i<p/3; i++)
11     {
12         double j=p-(double)p*p/(2*p-2*i);
13         if(i<j && j-(int)j<1e-5)
14         {
15             ans++;
16         }
17     }
18     cout<<ans<<endl;
19     return 0;
20     
21 }

 

以上是关于华为笔试:直角三角形个数的主要内容,如果未能解决你的问题,请参考以下文章

华为OD机试真题 Python 实现最多组合直角三角形个数2023 Q1 | 100分

华为OD机试真题 Java 实现最多组合直角三角形个数2023 Q1 | 100分

华为OD机试真题 Python 实现最多组合直角三角形个数2023 Q1 | 100分

华为OD机试真题 Java 实现最多组合直角三角形个数2023 Q1 | 100分

华为OD机试真题 C++ 实现最多组合直角三角形个数2023 Q1 | 100分

华为OD机试真题 C++ 实现最多组合直角三角形个数2023 Q1 | 100分