在C#中查找给定数组的方形对

时间:2014-06-20 12:46:39

标签: java c#

`我有以下数组{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);
        } `

2 个答案:

答案 0 :(得分:1)

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] });
    }
}

答案 1 :(得分:0)

我会让你写代码。

算法基本上是这样的:

  1. 迭代数组。删除值小于或等于零的所有元素。
  2. 使用嵌套循环(两个循环)创建所有可能的对。对于每一对,取总和。假设总和是S.取S的平方根。假设R的平方根。注意S是一个整数(因此,它可能不完全是S的平方根)。通过检查R * R = S
  3. 来检查S是否是完美的平方