#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main() {
int arr[7][7] = { {-5, -2, -1, 1, 6, 7, 8},
{-91, 6, 6, 7, 7, 8, 9},
{-10, -1, 6, 7, 8, 9, 10},
{-1, -1, 7, 8, 8, 8, 9},
{-10, -8, -5, -1, -1, 7, 8},
{-3, -2, -1, -1, 6, 7, 8},
{1, 4, 13, 22, 31, 40, 52},
};
for (int i = 0; i < 7; i++) {
for (int j = 0; j < 7;j++) {
printf("%d", arr[i][j]);
printf(" ");
}
printf("\n");
}
int mid = 0;
int left = 0;
int right = 6;
int k = 0;
while (left <= right) {
mid = (left + right) / 2;
if (arr[k][mid] > 5) {
right = mid--;
}
else if (arr[k][mid] < 0) {
left = mid++;
}
else {
printf("Value is located at [%i]:[%i]!", k, mid);
return 0;
}
k++;
}
return 0;
}
Надо сделать поиск по матрице.
k - номер строки.
В чём проблема?
Ниже код на одномерный массив:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int main() {
int arr2[7] = { -2, -1, 0, 1, 2, 3, 4 };
printf("This is arr2!\n=============\n");
for (int i = 0; i < 7; i++) {
printf(" %i |", arr2[i]);
}
printf("\n=============\n");
int left = 0;
int right = 6;
while (left <= right) {
int mid = (left + right) / 2;
if (arr2[mid] < 0) {
left = mid + 1;
}
else if (arr2[mid] > 5) {
right = mid - 1;
}
else {
printf("Needed value is with index = %i!", mid);
return 0;
}
}
return 0;
}
Мне надо найти первый элемент из диапазона (0:5)
В данном примере, оно выводит индекс еденицы = 3.
Потому что середина начинается с этого индекса и это значение попадает в диапазон.
Как это исправить?
Если задавать какое-то конкретное число, то находит правильно!