Проблема с вашим кодом заключается в следующем:
for (int i = 0; i < b.Length; i++)
{
for (int j = 0; j < a.Length; j++)
Вы выполняете цикл a для каждого значения в b. Тогда ваш код не сможет обработать, если одно и то же значение кратно.
т.е. b = {1,1,2,3,4}; a = {1,2,3,4,5}
Это вернет истину для вашего кода, что явно неверно.
Более того, эта строка действительно плохая:
if (Math.Sqrt(b[i]) == a[j])
Так что же делать? Это довольно просто.
- подсчитать каждый массив в словаре, но подсчитать их по-разному.
- При подсчете возведите его в квадрат и посчитайте значение в квадрате. ключ словаря = a [i] * a [i]; значение словаря + = 1;
- При подсчете b считать как есть. ключ словаря = b; значение словаря - = 1;
- Убедитесь, что ваш словарь пуст / заполнен 0.
В Java это становится:
Map<Long, Integer> count = new HashMap<>();
for (int av : a)
{
long av2 = ((long) av) * av;
map.put(av2, map.getOrDefault(av2, 0) + 1);
}
for (int bv : b)
{
map.put(bv, map.getOrDefault(bv, 0) - 1);
}
boolean isEqual = true;
for (long k : count.keySet())
{
isEqual &= map.get(k) == 0;
}
Замените map на словарь и методы на карте для методов в словаре, и у вас будет c# код.