返回首页 返回题库

完全平方数

C++ 简单 GESP三级真题 #数组#双重循环#完全平方数

题目描述

题面描述

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

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

输入格式

第一行一个非负整数n,表示非负整数个数。

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

输出格式

输出一个非负整数,表示和是完全平方数的非负整数对数。

样例1

输入:

5
1 4 3 3 5

输出:

3

样例解释:

符合条件的组合是(1,3)、(1,4)、(2,5),对应的和是4、4、9,都是完全平方数,共3对。

样例2

输入:

3
0 0 4

输出:

3

数据范围

对于全部数据,保证有1≤n≤100,0≤Ai≤105。

时间限制

1秒

内存限制

128MB

💡 查看提示(先自己想一想再看)
考察知识点:数组存储数据、双重循环遍历下标组合、完全平方数的判断。解题思路:1. 用数组存储输入的n个非负整数;2. 使用双重循环,外层循环遍历第一个数的下标i(从0或1开始均可),内层循环遍历第二个数的下标j,确保j始终大于i,避免重复计数;3. 对每对A[i]+A[j]判断是否为完全平方数,判断时可以先将和开平方取整,再将整数平方,看是否等于原和,注意加上1e-7等小量避免浮点数精度误差;4. 统计符合条件的组合数并输出。常见易错点:忘记确保j>i导致重复计数;浮点数开平方的精度问题导致判断错误。
⚙ 开始做这道题 3 人做过 · 2 收藏 · 19 浏览

讨论(0)