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;
}
}
В массивЕ или в массивАХ?

Если в массивЕ, то массив должен вводиться один раз. Ты же перед каждым вводом k производишь ввод нового массива.
Василий Зотов
Василий Зотов
89 771
Лучший ответ
Антон Резник мне нужно, чтобы было цикличное выполнение бинарного поиска
int a[n];
Не взлетит
Samir Babaev Взлетит на GCC/MinGW
Александр Акифьев компилятор будет против:-)
ChatGPT советует следующее:
В данном коде есть ошибка, которая приведет к неправильному результату. Ошибка заключается в том, что переменная index_k не сбрасывается в -1 перед каждым новым циклом поиска номера элемента в массиве.

После того, как номер элемента был найден, переменная index_k сохраняет его значение и используется для вывода результата. Однако, при следующем цикле поиска, index_k остается с предыдущего поиска, что приводит к неверным результатам.

Чтобы исправить ошибку, необходимо добавить index_k = -1; перед каждым новым циклом поиска номера элемента. Вот исправленный код:

 #include  
using namespace std;

int main() {
int n, k, index_k, req;
cin >> n >> req;
int a[n];

for (int j = 0; j < req; j++) {
index_k = -1;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
cin >> k;

int left = 0, right = n - 1;
int middle;
while (left
Андрей Гупало
Андрей Гупало
6 981
Антон Резник вывод не тот
В данном коде не хватает одной открывающей фигурной скобки после внешнего цикла for, который начинается с for (int j=0; j<req; j++). Добавьте скобку после этого цикла, чтобы программа скомпилировалась правильно.

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