Верно ли, что два массива отличаются не более чем порядком следования элементов? - C (СИ)
Формулировка задачи:
2. Верно ли, что два массива которые могут содержать повторяющиеся элементы отличаются не более чем порядком их следования.
можно на си++
Решение задачи: «Верно ли, что два массива отличаются не более чем порядком следования элементов?»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> int compare(const void* a, const void* b) { return (*(int*)a - *(int*)b); } bool CompareArrays(int* arr1, const size_t m, int* arr2, const size_t n) { if (m != n) return false; qsort(arr1, m, sizeof(*arr1), compare); qsort(arr2, n, sizeof(*arr2), compare); return (memcmp(arr1, arr2, m) == 0); } int main(void) { int values1[] = {40, 10, 100, 90, 20, 50, 25}; int values2[] = {40, 25, 100, 20, 90, 50, 10}; size_t m = sizeof(values1) / sizeof(*values1); size_t n = sizeof(values2) / sizeof(*values2); int values3[] = {40, 10, 100, 90, 20, 50, 25}; int values4[] = {40, 10, 100, 20, 90, 50, 10}; size_t x = sizeof(values3) / sizeof(*values3); size_t y = sizeof(values4) / sizeof(*values4); printf("values1 & values2 : %s\n", CompareArrays(values1, m, values2, n) ? "true" : "false"); printf("values3 & values4 : %s\n", CompareArrays(values3, x, values4, y) ? "true" : "false"); return 0; }
Объяснение кода листинга программы
- #include
- #include
- #include
- #include
- int compare(const void a, const void b)
- Данная функция сравнивает два указателя на int, возвращает разницу между ними.
- bool CompareArrays(int arr1, const size_t m, int arr2, const size_t n)
- Эта функция сравнивает два массива int, используя функцию сортировки qsort() для приведения их к одинаковому порядку элементов. Затем сравнивает отсортированные массивы с помощью функции memcmp().
- int main(void)
- В этой функции определены два массива int, которые будут сравниваться.
- Также определены еще два массива int, которые будут использоваться для проверки корректности работы функции сравнения массивов.
- printf(
values1 & values2 : %s\n
, CompareArrays(values1, m, values2, n) ?true
:false
); - Выводит на экран результат сравнения первых двух массивов.
- printf(
values3 & values4 : %s\n
, CompareArrays(values3, x, values4, y) ?true
:false
); - Выводит на экран результат сравнения вторых двух массивов.
- return 0;
- Завершает работу программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д