Поиск пары квадратов из заданного массива в C#

#java #c#

#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);
        } `
 

Комментарии:

1. какой код нужно было попробовать до сих пор, опубликуйте его, тогда кто-нибудь сможет вам помочь

2. используйте операторы foreach и if .

Ответ №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. Вы пропустили, что первый элемент должен быть меньше второго. И я использовал условие if. Но спасибо за ваш ответ, он действительно работает.

2. просто измените «где array [j]> 0» на «где array [j]> array [i]»

Ответ №2:

Я позволю вам написать код.

Алгоритм примерно такой:

  1. Выполните итерацию по массиву. Удалите все элементы, значение которых меньше или равно нулю.
  2. Создайте все возможные пары, используя вложенный цикл (два цикла). Для каждой пары возьмите сумму. Пусть, скажем, сумма равна S. Возьмите квадратный корень из S. Пусть, скажем, квадратный корень из R. Обратите внимание, что S является целым числом (поэтому оно может быть не совсем квадратным корнем из S). Проверьте, является ли S идеальным квадратом, проверив, является ли R * R = S.