90 lines
2.3 KiB
Python
90 lines
2.3 KiB
Python
import random as r
|
||
|
||
def search_matrix(matrix, K):
|
||
"""
|
||
Поиск числа K в матрице
|
||
"""
|
||
if not matrix or not matrix[0]:
|
||
return False, 0
|
||
|
||
N = len(matrix)
|
||
M = len(matrix[0])
|
||
|
||
row = 0
|
||
col = M - 1
|
||
steps = 0
|
||
|
||
while row < N and col >= 0:
|
||
steps += 1
|
||
current = matrix[row][col]
|
||
|
||
if current == K:
|
||
return True, steps
|
||
elif current > K:
|
||
col -= 1
|
||
else:
|
||
row += 1
|
||
|
||
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():
|
||
try:
|
||
N = int(input("Введите количество строк N: "))
|
||
M = int(input("Введите количество столбцов M: "))
|
||
except ValueError:
|
||
print("Ошибка: введите целые числа")
|
||
return
|
||
|
||
if N <= 0 or M <= 0:
|
||
print("Размеры матрицы должны быть положительными")
|
||
return
|
||
|
||
matrix = generate_matrix(N, M)
|
||
|
||
print("\nСгенерированная матрица:")
|
||
print_matrix(matrix)
|
||
|
||
try:
|
||
K = int(input("\nВведите число для поиска: "))
|
||
except ValueError:
|
||
print("Ошибка: введите целое число")
|
||
return
|
||
|
||
found, steps = search_matrix(matrix, K)
|
||
|
||
if found:
|
||
print(f"Число {K} найдено! Количество шагов: {steps}")
|
||
else:
|
||
print(f"Число {K} не найдено. Количество шагов: {steps}")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
main() |