From 04f96b1df98f954f30732b2a859481b242531f82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C?= Date: Wed, 1 Apr 2026 11:41:06 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B2=D0=B0=D1=80=D0=B8=D0=B0=D0=BD=D1=82=20=D1=80=D0=B5=D1=88?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B2=D0=BE=D0=B9?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=B4=D0=B0=D1=87=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- task1(2).py | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 task1(2).py diff --git a/task1(2).py b/task1(2).py new file mode 100644 index 0000000..24180a7 --- /dev/null +++ b/task1(2).py @@ -0,0 +1,107 @@ +import random as r +import bisect as b + +def search_binary_diagonal(matrix, K): + """ + Поиск числа K в матрице N x M + """ + if not matrix or not matrix[0]: + return False, 0 + + N = len(matrix) + M = len(matrix[0]) + steps = 0 + + left, right = 0, min(N, M) - 1 + diag_indx = -1 + + while left <= right: + steps += 1 + mid = (left + right) // 2 + + if matrix[mid][mid] == K: + return True, 1 + elif matrix[mid][mid] < K: + diag_indx = mid + left = mid + 1 + else: + right = mid - 1 + + if diag_indx >= 0 and diag_indx < N: + steps += 1 + row = matrix[diag_indx] + pos = b.bisect_left(row, K) + if pos < M and row[pos] == K: + return True, steps + + if diag_indx >= 0 and diag_idx < M: + steps += 1 + col_values = [matrix[i][diag_idx] for i in range(N)] + pos = b.bisect_left(col_values, K) + if pos < N and col_values[pos] == K: + return True, steps + + if diag_indx + 1 < N: + steps += 1 + row = matrix[diag_indx + 1] + pos = b.bisect_left(row, K) + if pos < M and row[pos] == K: + return True, steps + + if diag_indx + 1 < M: + steps += 1 + col_values = [matrix[i][diag_indx + 1] for i in range(N)] + pos = b.bisect_left(col_values, K) + if pos < N and col_values[pos] == K: + return True, steps + + return False, steps + + +def generate_matrix(N, M): + """ + Генерирует матрицу N x M со случайными числами + """ + matrix = [[0] * M for g in range(N)] + + + matrix[0][0] = r.randint(1, 10) + for j in range(1, M): + matrix[0][j] = matrix[0][j-1] + r.randint(1, 8) + + for i in range(1, N): + for j in range(M): + min_val = matrix[i-1][j] + if j > 0: + min_val = max(min_val, matrix[i][j-1]) + matrix[i][j] = min_val + r.randint(1, 8) + + return matrix + +def print_matrix(matrix): + """Вывод матрицы""" + for row in matrix: + print("\t".join(map(str, row))) + + +def main(): + N = int(input("Введите количество строк N: ")) + M = int(input("Введите количество столбцов M: ")) + + matrix = generate_matrix(N, M) + + print("\nСгенерированная матрица:") + print_matrix(matrix) + + K = int(input("\nВведите число для поиска: ")) + + found, steps = search_binary_diagonal(matrix, K) + + if found: + print(f"\nЧисло {K} найдено \nКоличество шагов: {steps}") + else: + print(f"\nЧисло {K} не найдено \nКоличество шагов: {steps}") + + +if __name__ == "__main__": + main() \ No newline at end of file