在c#中查找给定数组的正方形对
本文关键字:数组 正方形 查找 | 更新日期: 2023-09-27 18:09:36
'我有一个数组{9,0,2,- 5,7},从这个数组中我需要找到平方对<2,7>和<7,9>,其中第一个元素必须小于第二个元素。<-5, 9>和<0, 9>不是平方对,尽管它们的和是完全平方,因为正方形对的两个元素都必须大于0
bool ans;
int[] number = new int[]{9,0,2,-5,7};
for (int j = 0; j < number.Length; j++)
{
if (number[j]<number[j+1])
ans = IsPerfectSquares(number[j]+number[j+1]);
if(ans)
count++;
}
}
public static bool IsPerfectSquares(int input)
{ long SquareRoot = (long)Math.Sqrt(input);
return ((SquareRoot * SquareRoot) == input);
} `
c# Linq:
int[] array = {9, 0, 2, -5, 7};
int len = array.Length;
var pairs =
from i in Enumerable.Range(0, len-1)
where array[i] > 0
from j in Enumerable.Range(i+1, len-i-1)
where array[j] > 0
let sqrt = (int)Math.Sqrt(array[i] + array[j])
where array[i] + array[j] == sqrt * sqrt
select new {
A = Math.Min(array[i], array[j]),
B = Math.Max(array[i], array[j])
};
//or: select new int[] { ... };
结果:
{ A = 7, B = 9 }
{ A = 2, B = 7 }
Java:(也可以在c#中使用,只是语法略有不同)
int[] array = { 9, 0, 2, -5, 7 };
List<int[]> pairs = new ArrayList<int[]>();
for (int i = 0; i < array.length - 1; ++i) {
if (array[i] <= 0) continue;
for (int j = i + 1; j < array.length; ++j) {
if (array[j] <= 0) continue;
int sqrt = (int)Math.sqrt(array[i] + array[j]);
if (array[i] + array[j] == sqrt * sqrt)
pairs.add(new int[] { array[i], array[j] });
}
}
我让你写代码。
算法大致如下:
- 遍历数组。删除值小于等于0的所有元素。
- 使用嵌套循环(两个循环)创建所有可能的对。对每一对取和。假设和是S,取S的平方根,取R的平方根,注意S是一个整数(因此,它可能不完全等于S的平方根),通过检查R*R = S是否为完全平方。