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)
表示 float
型,看它是否相等
by Hongfr @ 2024-04-26 21:25:23
这样就不需要再进行三循环了
by Hongfr @ 2024-04-26 21:26:26
@huangluochengshuo
已经帮你
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