1 / 5 / 0
Регистрация: 16.10.2017
Сообщений: 170

Бинарный поиск: определить индекс самого левого вхождения числа Х в исходный набор

27.10.2017, 16:19. Показов 5404. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
дано целое число Х и текстовый файл с именем FileName. В файле записан ряд целых чисел, расположенных по неубыванию. С помощью бинарного поиска определить индекс самого левого вхождения числа Х в исходный набор. Нумерация элементов начинается с нуля. Если элемент не найден вывести -1. Чисел в наборе не более 200.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.10.2017, 16:19
Ответы с готовыми решениями:

Определить номер самого левого столбца матрицы, содержащего только положительные элементы
Написать функцию, которая в матрице размером m * n определяет номер самого левого столбца, содержащего только положительные элементы. Если...

Поиск подстроки в строке и индекс первого вхождения
Доброго времени суток! Как осуществляется поиск подстроки? Весь день пытался придумать, облазил инет, но находил только не рабочие...

(C) Дан бинарный файл, содержащий прямоугольники(координаты левого верхнего и правого нижнего угла–целые числа типа int)
Дан файл, содержащий прямоугольники (координаты левого верхнего и правого нижнего угла – целые числа типа int). Удалить из файла все...

3
Wanna be serious
 Аватар для Bespridelschic
587 / 474 / 186
Регистрация: 31.07.2013
Сообщений: 1,693
28.10.2017, 09:54
В вашем случае, необходимо сначала считать данные из файла, и записать их в массив. После того как решите
эту проблему, можете приступать к реализации процедуры бинарного поиска, что не должно привести к каким-то
затруднениям, ибо информации по бинарному поиску в интернете море.

Для примера можете посмотреть один из вариантов реализации Binary Search в Википедии, там довольно просто
все изложено.
0
 Аватар для Геомеханик
838 / 641 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
28.10.2017, 17:57
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <fstream>
#include <sstream>
#include <vector>
#include <iterator>
 
int bin_find(std::istream& _in, int x){
    std::vector<int> vs;
    std::copy(std::istream_iterator<int>(_in), std::istream_iterator<int>(), std::back_inserter(vs));
 
    if(vs.empty() || (x < vs[0]) || (x > vs[vs.size() - 1]))
        return -1;
 
    std::vector<int>::size_type a, b, m;
    a = 0;
    b = vs.size();
    while(a < b){
        m = a + (b - a) / 2;
        if(x < vs[m])
            b = m;
        else if(x > vs[m])
            a = m + 1;
        else {
            while((m > 0) && (vs[m] == x))
                --m;
 
            if(vs[m] != x)
                ++m;
            return static_cast<int>(m);
        }
    }
    return -1;
}
 
int main(void){
    int i, X = 3;
    //для примера поиск в строке
    char s[] = "0 1 2 3 3 3 3 5";
    std::istringstream sp(s);
    if((i = bin_find(sp, X)) != -1)
        std::cout << "index: " << i << std::endl;
 
    //поиск в файле
    std::ifstream fp("file.txt");
    if((i = bin_find(fp, X)) != -1)
        std::cout << "index: " << i << std::endl;
    fp.close();
    std::cin.get();
    return 0;
}
0
677 / 479 / 216
Регистрация: 06.09.2013
Сообщений: 1,312
28.10.2017, 18:19
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int bin_search(int *arr, int low, int high, int x) {
    while(high - low > 1) {
        int mid = low + (high - low) / 2;
        if(x <= arr[mid]) {
            high = mid;
        } else if(x > arr[mid]) {
            low = mid;
        }
    }
    if(arr[low] == x) return low;
    if(arr[high] == x) return high;
    return -1;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.10.2017, 18:19
Помогаю со студенческими работами здесь

определить позицию самого правого вхождения в заданную строку
помогите решить задачу: Составить процедуру, позволяющую определить позицию самого правого вхождения в заданную строку какого-либо...

Определить позицию самого правого вхождения символа в строку
Составить процедуру, позволяющую определить позицию самого первого вхождения заданного символа в исходную строку. Если строка не содержит...

Определить позицию самого правого вхождения заданного символа в строку
Здраствуйте! Помогите пожалуйста решить задачи. Проблема с процедурами, не могу понять их. ПОмогите пожалуйста!!!1. Составить процедуру...

Найти индекс первого вхождения максимального числа
6. Дана линейная таблица размерности N, нумерация элементов начинается с 1. Найти индекс первого вхождения максимального числа. ТУ. В...

Определить позицию самого правого вхождения заданного символа в исходную строку
Помогите пожалуйста Составить функцию, позволяющую определить позицию самого правого вхождения заданного символа в исходную строку. Если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru