База ответов ИНТУИТ

Программирование

<<- Назад к вопросам

Пусть дан массив a длины n,элементы которого нестрого возрастают, т.е. соседниеэлементы могут быть равными.Рассмотрим фрагмент программы бинарного поискаэлемента x в массивеa длины n, гдепосле отбрасывания особых ситуаций рассматриваетсяосновной случай:
        . . .        // Утверждение: a[0] < x && x <= a[n-1]        int beg = 0; int end = n-1;        while (end-beg > 1) {            // Инвариант: a[beg] < x && x <= a[end]            int c = (beg + end) / 2;            if (a[c] < x) {                beg = c;            } else if (a[c] > x) {                end = c;            } else {                // Утверждение: x == a[c]                *idx = c;                return true;            }        }        *idx = end;        return (x >= a[end]);        . . .
Пусть значение x содержится в массивев нескольких экземплярах. Индекс какого элементамассива a будет записан в переменную *idx?

(Отметьте один правильный вариант ответа.)

Варианты ответа
Индекс поcледнего элемента, равного x-1.
Может быть записан индекс любого элемента массива a, равного x. (Верный ответ)
Индекс поcледнего элемента, равного x.
Индекс первого элемента, равного x.
Индекс первого элемента, равного x+1.
Похожие вопросы
Пусть дан массив a длины n,элементы которого нестрого возрастают, т.е. соседниеэлементы могут быть равными.Рассмотрим фрагмент программы бинарного поискаэлемента x в массивеa длины n, гдепосле отбрасывания особых ситуаций рассматриваетсяосновной случай:
        . . .        // Утверждение: a[0] <= x && x < a[n-1]        int beg = 0; int end = n-1;        while (end-beg > 1) {            // Инвариант: a[beg] <= x && x < a[end]            int c = (beg + end) / 2;            if (a[c] <= x) {                beg = c;            } else {                end = c;            }        }        if (a[beg] == x) {            *idx = beg;        } else  {            *idx = end;        }        . . .
Пусть значение x содержится в массивев нескольких экземплярах. Индекс какого элементамассива a будет записан в переменную *idx?
Пусть дан массив a длины n,элементы которого нестрого возрастают, т.е. соседниеэлементы могут быть равными.Рассмотрим фрагмент программы бинарного поискаэлемента x в массивеa длины n, гдепосле отбрасывания особых ситуаций рассматриваетсяосновной случай:
        . . .        // Утверждение: a[0] < x && x <= a[n-1]        int beg = 0; int end = n-1;        while (end-beg > 1) {            // Инвариант: a[beg] < x && x <= a[end]            int c = (beg + end) / 2;            if (a[c] < x) {                beg = c;            } else {                end = c;            }        }        *idx = end;        . . .
Пусть значение x содержится в массивев нескольких экземплярах. Индекс какого элементамассива a будет записан в переменную *idx?
Пусть элементы массива aнестрого возрастают (соседние элементы могут быть равными).Дано произвольное значение x, требуетсянайти максимальный индекс i такой, чтоa[i] <= x. Используется идея алгоритмабинарного поиска. Каким должен быть инвариант цикла,в котором рассматривается основной случай после отбрасыванияисключительных ситуаций?(Условие завершения циклаend == beg+1.)
Пусть элементы массива aнестрого возрастают (соседние элементы могут быть равными).Дано произвольное значение x, требуетсянайти минимальный индекс i такой, чтоa[i] >= x. Используется идея алгоритмабинарного поиска. Каким должен быть инвариант цикла,в котором рассматривается основной случай после отбрасыванияисключительных ситуаций?(Условие завершения циклаend == beg+1.)
Пусть элементы массива aнестрого возрастают (соседние элементы могут быть равными).Дано произвольное значение x, требуетсянайти максимальный индекс i такой, чтоa[i] <= x. Используется идея алгоритмабинарного поиска. В приведенном ниже циклерассматривается основной случай после отбрасыванияисключительных ситуаций:
    while (end-beg > 1) {        int c = (beg+end)/2;        if (a[c] <= x)            beg = c;        else            end = c;    }    // ответ в переменной beg
Какое утверждение являетсяинвариантом этого цикла?
Пусть a - целочисленный массив размера n(индекс элементов меняется от 0 до n-1),элементы которого строго возрастают:a[0] < a[1] <... < a[n-1].Определить, содержит ли следующий фрагмент программы ошибку(т.е. действительно ли тело цикла сохраняет инвариант):
// Программа Поиск    int n; int *a;    . . .    // дано: целое n;    //       целочисленный массив a[n],    //           элементы которого строго возрастают    //           a[0] < a[1] < ... < a[n-1]    // надо: найти элемент x в массиве    int x;          // искомый элемент    . . .           // рассматриваются исключительные случаи    // общий случай    // утверждение: a[0] < x  &&  x <= a[n-1];    int b = 0; int e = n - 1;    while (e - b > 1) {        Invariant: a[b] < x  &&  x <= a[e]        int c := (a + b)/2; // c - целая часть (a+b)/2        if (x < a[c]) {            e = c;  // выбираем левую половину отрезка        } else {            b = c;  // выбираем правую половину        }    }    // утверждение: b == e - 1   &&    //              a[b] < x  &&  x <= a[e]
Пусть функцияf(x) = p*x2 + q*x + r(многочлен степени 2) задана на отрезке [a, b].Пусть отрезок [a, b] разделен на 4 равных части;обозначим концы этих отрезков черезx0, x1,x2, x3, x4:
    h = (b-a)/4, xi = a+i*h, i = 0,1,2,3,4.
Обозначим
    yi = f(xi).
Чему равен интеграл функции f(x)по отрезку [a, b]? Отметьте все правильные ответы.
Пусть w - последовательностьцелых чисел, F(W) - максимальная изсумм нескольких подряд идущих элементовпоследовательности w.Например, для последовательностиw={1, -2, 3, 4, -1, 5, -2, -3, 4}максимальную сумму образуют элементы с третьего по шестой:F(w)=3+4-1+5=11.Какие из перечисленных ниже функцийявляются индуктивным расширением функции F?Укажите все правильные варианты.
Для записи n-значных чисел в системе счисления с основаниемb требуется n разрядов,каждый из которых может находитьсяв b состояниях. Таким образом, суммарное число состоянийравно произведению n*b.Рассмотрим двоичную (b=2), троичную(b=3) и десятичную (b=10) системы счисления.Какая из нихнаиболее экономна по суммарному числу состояний для записичисел в диапазоне 0..N,где N - некоторое достаточно большое число?
Пусть расположенный в статической памятицелочисленный массив a описан как
static int a[] = {    1, 1, 2, 2, 3, 3, 4, 4, 5, 5};
Пусть в программе задана функция суммирования массивас прототипом
int sum(const int *m, int n);
где m - константный указатель на началомассива, n - число его элементов. Укажите,чему будет равно значение переменной s врезультате выполнения следующего фрагмента программы:
    int s = sum(a+5, 3);