В этой задаче от вас потребуется написать функцию bool is_permutation(int* A, int* B, int size), которой дается два массива A и B, и она должна вернуть true, если массив B можно получить из массива A перестановкой элементов, и false, если нельзя.
Считайте оба массива с клавиатуры, используйте функцию и выведите «YES» или «NO» в зависимости от того, что вернула функция.
Формат входных данных
На первой строке дано одно целое число N (1 ≤ N ≤ 100) — количество элементов в массивах. В второй строке заданы целые числа, не превосходящие 230 по абсолютной величине, — элементы первого массива. В третьей строке в том же формате — элементы второго массива.
Формат выходных данных
Требуется вывести «YES», если можно получить второй массив из первого перстановкой элементов, и «NO», если нельзя.
входные данные
4
1 2 3 4
4 3 2 1
5
1 2 3 2 1
1 2 2 3 3
выходные данные
YES
NO
Объяснение:
В общем сделал так чтобы проверялись вообще все возможные перестановки чисел, а не одинарные
#include <iostream>
using namespace std;
bool is_permutation(int* A, int* B, int size);
int main()
{
int *A, *B, N;
bool result;
cin >> N;
A = new int[N];
B = new int[N];
for (int i = 0; i < N; i++) cin >> A[i];
for (int i = 0; i < N; i++) cin >> B[i];
result = is_permutation(A, B, N);
if (result) cout << "YES";
else cout << "NO";
return 0;
}
bool is_permutation(int* A, int* B, int size)
{
int CountInA, CountInB;
for (int i = 0; i < size; i++) { // Перебираем по одному все элементы массива B
CountInA = 0;
CountInB = 0;
for (int j = 0; j < size; j++)
{
if (B[i] == A[j]) CountInA++; // Считаем сколько раз этот элемент встретился в массиве А
if (B[i] == B[j]) CountInB++; // Считаем сколько раз этот элемент встретился в массиве B
}
if (CountInA != CountInB) return false;// Если счётчики не совпали, то сразу выходим из цикла
}
return true;// Если счётчики всегда совпадали, то мы попадём сюда и массивы состоят из одинакового количества одинаковых элементов
}