Бинарный поиск: Если в первом массиве есть такое же число, как и во втором, то написать YES - C (СИ)
Формулировка задачи:
Можете помочь составить бинарный поиск вида: если в первом массиве есть такое же число, как и во втором, то написать YES, иначе NO?
Решение задачи: «Бинарный поиск: Если в первом массиве есть такое же число, как и во втором, то написать YES»
textual
Листинг программы
#include <stdbool.h> #include <stdlib.h> #include <stdio.h> int compare(const void* pa, const void* pb) { int a = *(int*)pa; int b = *(int*)pb; return a < b ? -1 : a != b; } bool present(int* arr1, size_t siz1, int* arr2, size_t siz2) { while (siz2--) { if (bsearch(arr2++, arr1, siz1, sizeof(int), compare)) { return true; } } return false; } int main(void) { int a[] = { 1, 2, 3 }; int b[] = { 8, 9, 0 }; puts(present(a, 3, b, 3) ? "YES" : "NO"); return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек: stdbool.h, stdlib.h, stdio.h
- Определение функции сравнения: compare(const void pa, const void pb)
- Функция принимает на вход два указателя на массивы: arr1, arr2
- Внутри функции происходит приведение указателей к типу int: a = (int)pa; b = (int)pb;
- Затем происходит сравнение a и b: return a < b ? -1 : a != b;
- Если a меньше b, то возвращается -1, иначе возвращается 0
- В функции present(int arr1, size_t siz1, int arr2, size_t siz2) идет поиск числа из массива arr2 в arr1 с помощью функции bsearch
- Если число найдено, то функция возвращает true, иначе false
- В функции main создаются два массива: a и b
- Массив a содержит: 1, 2, 3, а массив b содержит: 8, 9, 0
- Затем вызывается функция present с этими массивами и выводится результат на экран с помощью функции puts
- Результатом выполнения программы будет
NO
, так как число 0 из массива b не найдено в массиве a
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д