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。