C/C++

C++. Где ошибка?Необходимо определенное количество раз выполнить поиск номера элемента в массиве по его значению.

#include <iostream>
using namespace std;
int main() {
int n,k,index_k,req,j;
index_k=-1;
cin >> n;
cin >> req;
int a[n];
for (int j=0; j<req; j++)
{
for (int i=0; i<n; i++)
cin >> a[i];
cin >> k;
int left = 0, right = n-1;
int middle;
while (left <= right){
middle = (left+right)/2;
if (k == a[middle]) {
index_k = middle;
break;
}
if (k < a[middle]) right = middle - 1;
else left = middle + 1;
}
if (index_k == -1 )
cout << "not_found";
else cout << index_k+1;
}
}
DS
Damir Shumaher
72
В данном коде отсутствует объявление переменной "j" в главной функции, но она используется в цикле "for" внутри функции.

Чтобы исправить это, необходимо объявить переменную "j" в главной функции перед циклом "for", например, так:
 int n,k,index_k,req,j;  
index_k=-1;
cin >> n;
cin >> req;
int a[n];
for (j=0; j> n;
cin >> req;
int a[n];
for (int i=0; i> a[i];
for (j=0; j> k;
int left = 0, right = n-1;
int middle;
while (left
Виталик
Виталик
9 925
Лучший ответ
Миша Мирафизов Чтобы двоичный поиск работал правильно, необходимо, чтобы массив был отсортирован. Разве программа, показанная в данном вопросе, предоставляет такие гарантии?
В данном коде есть ошибка в том, что внешний цикл for повторяется только req раз, в то время как внутренний цикл считывает массив a с клавиатуры и выполняет поиск в нем значения k для каждого значения j от 0 до req-1. Однако, на каждой итерации внутреннего цикла значение a перезаписывается, так что поиск для предыдущих значений j не сохраняется, и программа выводит только последний результат.

Чтобы исправить эту ошибку, нужно считывать массив a с клавиатуры перед началом внешнего цикла, а затем выполнять поиск значения k в каждой итерации цикла, используя уже считанный массив.

Исправленный код может выглядеть следующим образом:


 #include  
using namespace std;

int main() {
int n, k, index_k, req;
cin >> n;
int a[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
cin >> req;
for (int j = 0; j < req; j++) {
cin >> k;
index_k = -1;
int left = 0, right = n - 1;
int middle;
while (left
ando.tver
ando.tver
154

Похожие вопросы