50分WA,求条

B3957 [GESP202403 三级] 完全平方数

shuifan @ 2024-12-15 14:21:38

#include<bits/stdc++.h>
using namespace std;
int n,a[1000000],cnt;
int main(){
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
            if(a[i]+a[j]==sqrt(a[i]+a[j])*sqrt(a[i]+a[j])){
                cnt++;
            }
        }
    }
    cout<<cnt;
    return 0;
}

by Rigil_Kent @ 2024-12-15 14:26:28

long long


by szx1018 @ 2024-12-21 19:32:18

if(a[i]+a[j]==sqrt(a[i]+a[j])*sqrt(a[i]+a[j])){
  cnt++;
}

sqrt()里面是double类型,你建的是int类型的数组。

@shuifan


by szx1018 @ 2024-12-21 19:40:19

if(a[i]+a[j]==sqrt(a[i]+a[j])*sqrt(a[i]+a[j])){
  cnt++;
}

其次,if条件不对,应该判断sqrt(a[i]+a[j])是否为整数。@shuifan


by szx1018 @ 2024-12-21 19:45:39

修改后代码:

#include<bits/stdc++.h>
using namespace std;
int n,cnt;
double a[1000000];
int main(){
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a[i];
    }
    for(int i=0;i<n;i++){
        for(int j=i+1;j<n;j++){
        int t=sqrt(a[i]+a[j]);//作一个类型转换
            if(a[i]+a[j]==t*t){//如果sqrt(a[i]+a[j])为整数条件成立
                cnt++;
            }
        }
    }
    cout<<cnt;
    return 0;
}

@shuifan求关


|