跪求神犇

B3957 [GESP202403 三级] 完全平方数

huangluochengshuo @ 2024-04-26 21:15:38

#include<bits/stdc++.h>
using namespace std;
int a[100003],ans,s,m,n;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>a[i];
    }
    for(int i=1;i<=n;i++)
        for(int j=i+1;j<=n;j++)
        {
            s=a[i]+a[j];
            for(int z=1;z<=s;z++)
            {
                if(s%z==0)
                {
                    m=s/z;
                }
                if(m==z)
                {
                    ans++;
                    break;
                }
            }
        }
    cout<<ans;
    return 0;
}

by Hongfr @ 2024-04-26 21:23:19


by Hongfr @ 2024-04-26 21:23:48

推荐你改成这个

if (pow(sqrt(arr[i]+arr[j]),2)==arr[i]+arr[j])

by Hongfr @ 2024-04-26 21:24:55

@huangluochengshuo

sqrt 表示平方根, pow(a,b) 表示 a^b ,把 arr 定义成 float 型,看它是否相等


by Hongfr @ 2024-04-26 21:25:23

这样就不需要再进行三循环了


by Hongfr @ 2024-04-26 21:26:26

@huangluochengshuo

已经帮你 \color{green}AC 了,你试着自己改一下,如果真的不会可以找我要源代码


by huangluochengshuo @ 2024-04-26 21:52:57

@WangJiang666 就是先求出arr[i]+arr[j]的平方根再求出它的平方如果arr[i]+arr[j]的平方根为小数int取整数再平方就不是原来的数了如果是完全平方数它的平方根是整数再平方就是原来的数了


by huangluochengshuo @ 2024-04-26 21:58:16

@WangJiang666 为什么50


by Hongfr @ 2024-04-26 22:21:17

@huangluochengshuo

理解错了,代码你看一下

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <cstring>
using namespace std;
int n,cnt;
float arr[1001];
int main()
{
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    {
        scanf("%f",&arr[i]);
    }
    for (int i=1;i<=n;i++)
    {
        for (int j=i+1;j<=n;j++)
        {
            if (pow(sqrt(arr[i]+arr[j]),2)==arr[i]+arr[j])
                cnt++;
        }
    }
    printf("%d",cnt);
}

by huangluochengshuo @ 2024-04-27 09:12:37

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

@WangJiang666


by Hongfr @ 2024-04-27 13:10:09

@huangluochengshuo


| 下一页