1 条题解

  • 0
    @ 2026-1-28 14:56:04
    #include<iostream>
    using namespace std;
    // [1] arr:存储输入的非负整数序列;brr:存储所有i<j的两数之和
    int arr[1100];
    int brr[1000100]={};
    
    int main(){
        int n; // [2] n:输入的非负整数序列的长度
        cin>>n;
        // [3] 读取n个非负整数,存入数组arr
        for(int i=0;i<n;i++) cin>>arr[i];
    
        int x=0; // [4] x:brr数组的索引,用于统计两数之和的数量
        // [5] 双重循环生成所有i<j的两数之和,存入brr数组
        for(int i=0;i<n-1;i++){
            for(int j=i+1;j<n;j++){
                brr[x++]=arr[i]+arr[j];
            }
        } 
    
        int sum=0; // [6] sum:统计两数之和为完全平方数的数对数量
        // [7] 遍历所有两数之和,判断是否为完全平方数
        for(int i=0;i<x;i++){
            for(int j=0;j*j<=brr[i];j++){
                if(j*j==brr[i]){ // 若当前和是j的平方,说明是完全平方数
                    sum++;
                    break; // 找到后跳出内层循环,避免重复判断
                }
            }
        }
        cout<<sum; // [8] 输出满足条件的数对总数
        return 0; 
    }
    
    • 1

    信息

    ID
    827
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    2
    已通过
    2
    上传者