[GESP202403 三级] 完全平方数

GESP编程共123题,本题是整站第1399题,已经有人完成了本题,加油!

题目描述

小杨同学有一个包含 n 个非负整数的序列 A,他想要知道其中有多少对下标组合 ⟨i,j⟩(1≤i<j≤n),使得 Ai​+Aj​ 是完全平方数。

如果 x 是完全平方数,则存在非负整数 y 使得 y×y=x。

输入格式

第一行一个非负整数 n,表示非负整数个数。
第二入行包含 n 个非负整数 A1​,A2​,…An​,表示序列 A 包含的非负整数。

输出格式

输出一行一个整数表示答案。

输入输出样例

输入 #1

5
1 4 3 3 5

输出 #1

3

说明/提示

对全部的测试数据,保证 1≤n≤1000,0≤Ai​≤10^5。

别灰心,再试一次!

真题解析

【解题思路】

此题需要计算给定数组中两个元素的和,如果和是一个完全平方数,则将计数器ans 的值加1。

可以使用嵌套的循环,通过遍历数组中的元素,计算两两元素之和,并判断和是否是完全平方数。如果是,则计数器ans 的值加1。

注意:sqrt是用于开根号的数学函数,返回结果是浮点数。在计算机中,浮点数运算可能存在精度问题。为了避免由于浮点数精度损失而导致的不准确结果,常常会采取一些技巧来处理。其中,1e-7是一个非常小的数,表示1 乘以10 的负7 次方,即0.0000001。

int t = sqrt(m + 1e-7)。将其加到被开方的数m 上,用t来记录m开根号的结果。再用t*t ==m来判断m是否是一个完全平方数,可以在某种程度上弥补浮点数运算的精度问题。

【参考程序】

本站题目仅供学习,GESP版权归CCF所有,如有侵权请联系删除。站长陈老师QQ及微信:208234。