B3957 [GESP202403 三级] 完全平方数

· · 题解

欢迎报名洛谷网校,期待和大家一起进步!

:::align{center} :::

本题考察数组、循环枚举法。

询问有多少对下标组合 \langle i,j\rangle,不难想到使用循环去枚举 i,j,将 a_ia_j 相加,判断它们的和 sum 是否是完全平方数即可。

判断是否是完全平方数的方式,是将 sum 开根号的结果放入一个 int 类型变量 sq 中,随后我们判断 sq * sq 是否等于 sum。例如,\sqrt{2} \approx 1.414,转为 int 类型后是 1,而 1\times 1=1\neq 2,因此 \sqrt{2} 不是一个整数,因此 2 不是一个完全平方数。

参考代码:

for (int i = 1; i <= n - 1; i++) {
    for (int j = i + 1; j <= n; j++) {
        int sum = a[i] + a[j];
        int sq = sqrt(sum);
        if (sq * sq == sum)
            ans++;
    }
}