1 条题解

  • 2
    @ 2024-4-27 15:24:12

    【题目大意】

    本题考察循环枚举,求1abcn1≤a≤b≤c≤n的范围内,满足a2+b2=c2a²+b²=c²的三元组(a,b,c)(a,b,c)的个数。

    【考纲知识点】

    基本运算(一级), 循环结构(二级)

    【解题思路】

    枚举 𝑎,𝑏,那么我们定 𝑐为 𝑎2+𝑏2\sqrt{𝑎²+𝑏²}

    接下来我们需要判断一下 𝑐 是否满足以下条件:

    1.𝑐𝑛𝑐≤𝑛:判断 𝑐是否在 𝑛的范围内。

    2.𝑐2=𝑎2+𝑏2𝑐²=𝑎²+𝑏²:由于 𝑐 已经向下取整,所以这样判断即可确定 a2+𝑏2\sqrt {a²+𝑏²}​ 是否为整数。

    判断成功后累加即可,时间复杂度 𝑂(𝑛2) 𝑂(𝑛^2) ,可以通过。

    【参考程序】

    #include <bits/stdc++.h>
    using namespace std;
    
    int n,sum;
    
    int main(){
        cin>>n;
        for (int a=1;a<=n;a++){       //枚举a的范围
            for (int b=a;b<=n;b++){   //枚举b的范围
                int c=sqrt(a*a+b*b);  //计算出c,开根号后向下取整
                if (c<=n && c*c==a*a+b*b){ //判断c是否满足两个条件
                    sum++;    //满足即计数加1
                }
            }
        }
        cout<<sum; //输出结果
    
        return 0;
    }
    
    • 1

    [GESP样题 二级] 勾股数

    信息

    ID
    554
    时间
    1000ms
    内存
    128MiB
    难度
    5
    标签
    递交数
    140
    已通过
    58
    上传者