【发布时间】:2020-11-27 08:16:26
【问题描述】:
问题的条件: 给定两个数组 a 和 b,编写一个函数 comp(a, b) 来检查两个数组是否具有“相同”元素,是否具有相同的多重性。这里的“相同”意味着b中的元素是平方中的元素,无论顺序如何。
我的函数如下所示:
public static bool comp(int[] a, int[] b)
{
bool result = false;
if (a == null || b == null)
return false;
for (int i = 0; i < b.Length; i++)
{
for (int j = 0; j < a.Length; j++)
{
if (Math.Sqrt(b[i]) == a[j])
{
result = true;
break;
}
result = false;
}
if (result == false) break;
}
return result;
}
但是这个函数并没有通过所有的测试。我的代码中的错误在哪里?解决这个问题的最佳方法是什么?
【问题讨论】:
-
if(a == null && b == null)-- 从技术上讲应该返回 true 吗?还是我太善变了:) -
Math.Sqrt(b[i]) == a[j]- 如果a是-2,那么b是什么,那么b的平方根是多少? -
解决这个问题的最好方法是编写覆盖问题空间的测试用例,然后在发现失败时开始调试。
-
Protip:
Math.Sqrt很贵。将b[i]与a[j] *a[j]进行比较会便宜得多。