酷代码 AI
菜单

题目描述 小杨同学有一个包含 n n 个非负整数的序列 A A,他想要知道其中有多少对下标组合 < i , j > <i,j>( 1 ≤ i < j ≤ n 1≤i<j≤n),使得 A i + A j A i ​ +A j ​ 是完全平方数。 如果 x x 是完全平方数,则存在非负整数 y y 使得 y × y = x y×y=x。 输入格式 第一行一个非负整数 n n,表示非负整数个数。 第二入行包含 n n 个非负整数 A 1 , A 2 , … A n A 1 ​ ,A 2 ​ ,…A n ​ ,表示序列 A A 包含的非负整数。 输出格式 输出一行一个整数表示答案。

以下是使用 Python 实现的代码,用于解决小杨同学的问题: ```python import math # 读取输入 n = int(input()) A = list(map(int, input().split())) # 初始化计数器 count = 0 # 遍历所有可能的下标组合 <i, j> for i in range(n): for j in range(i + 1, n): # 计算 A[i] + A[j] 的值 s = A[i] + A[j] # 计算平方根 sqrt_s = math.sqrt(s) # 判断是否为完全平方数 if int(sqrt_s) 2 == s: count += 1 # 输出结果 print(count) ``` 代码解释 1. 输入处理:首先读取非负整数的个数 `n`,然后读取包含 `n` 个非负整数的序列 `A`。 2. 初始化计数器:使用变量 `count` 来记录满足条件的下标组合的数量。 3. 双重循环遍历所有可能的下标组合:外层循环遍历 `i` 从 0 到 `n - 1`,内层循环遍历 `j` 从 `i + 1` 到 `n - 1`,确保 `i < j`。 4. 判断是否为完全平方数:对于每一对下标组合 `(i, j)`,计算 `A[i] + A[j]` 的值 `s`,然后计算 `s` 的平方根 `sqrt_s`。如果 `sqrt_s` 的整数部分的平方等于 `s`,则说明 `s` 是完全平方数,将计数器 `count` 加 1。 5. 输出结果:最后输出计数器 `count` 的值,即满足条件的下标组合的数量。 这个算法的时间复杂度是 $O(n^2)$,因为需要遍历所有可能的下标组合。 [2026-01-10 21:08:04 | AI问答 | 434点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多