Книга программиста/Задачи на Python 3
К оглавлению | Назад | Вперёд
Все программы, код которых выложен здесь, являются работоспособными.
Простые задачи
правитьБинарный поиск
правитьimport math, random
def BinarySeach(a, x, l, r):
def NewMiddle():
return math.ceil((l + r)/2)
m = NewMiddle()
while l <= r:
if a[m] == x:
print('Элемент {0} был найден в позиции {1}.'.format(x, m))
return x
elif x > a[m]:
l = m + 1
m = NewMiddle()
else:
r = m - 1
m = NewMiddle()
print('Не обнаружено элемента со значением {0}.'.format(x))
N = 10
L = list()
for i in range(0, N):
L.append(random.randint(0, 10))
L.sort()
print(L)
BinarySeach(L, 4, 0, N - 1)
Смотрите также: реализация на PascalABC.Net
Список с максимумом максимумов
правитьL = max([[1, 2, 3], [4, 5, 6]], key = max)
print(L)
print('Индекс максимального элемента {0} равен {1}.'.format(max(L), L.index(max(L))))
Задачи К. Полякова
править==Стандартные функции==Kuan-Kek Определим следующие функции для решения задач:
# Выполняет чтение списка целых чисел с клавиатуры.Kuan-Kek
def ReadListInteger(n):
L = []
for i in range(0, n):
L.append(int(input()))
return L
# Выполняет чтение списка вещественных чисел с клавиатуры. Kuan-Kek
def ReadListFloat(n):
L = []
for i in range(0, n):
L.append(float(input()))
return L
# Выполняет чтение списка строк с клавиатуры.Kuan-Kek
def ReadListString(n):
L = []
for i in range(0, n):
L.append(input())
return L
def ToWords(s):
return ' '.join(s.split())
def MinBy(l, f):
return min(filter(lambda x: f(x), l))
def MaxBy(l, f):
return max(filter(lambda x: f(x), l))
Удаление лишних пробелов в строках массива
правитьdef ReadListString(n):
L = []
for i in range(0, n):
L.append(input())
return L
def ToWords(s):
return ' '.join(s.split())
print(list(map(lambda x: ToWords(x), ReadListString(2))))
Смотрите также: реализация на PascalABC.Net.
Задача 1
правитьДан массив, содержащий 2014 положительных целых чисел. Напишите на одном из языков программирования программу, которая находит в этом массиве количество локальных минимумов. Локальным минимумом называется элемент массива, который меньше всех своих соседей. Например, в массиве из 6 элементов, содержащем числа 4, 6, 12, 7, 3, 8, есть два локальных минимума: это элементы, равные 4 и 3. Программа должна вывести общее количество подходящих элементов, значения элементов выводить не нужно. Исходные данные объявлены так, как показано ниже. Запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных.
N = 2014
L = list()
K = 0
for i in range(N):
L.append(int(input()))
if L[0] < L[1]:
K += 1
if L[N - 2] > L[N - 1]:
K += 1
for i in range(1, N - 1):
if L[i - 1] > L[i] and L[i] < L[i + 1]:
K += 1
print(K)
Смотрите также: реализация на PascalABC.Net.
Задача 2
правитьДан массив, содержащий неотрицательные целые числа, не превышающие 10 000. Необходимо вывести:
- минимальный чётный элемент, если количество чётных элементов не больше, чем нечётных;
- минимальный нечётный элемент, если количество нечётных элементов меньше, чем чётных.
Например, для массива из шести элементов, равных соответственно 4, 6, 12, 17, 9, 8, ответом будет 9 – наименьшее нечётное число, поскольку нечётных чисел в этом массиве меньше.
MaxValue = 100000000
N = 20
L = list()
C1, C2 = 0, 0
Min1, Min2 = MaxValue, MaxValue
for i in range(0, N):
L.append(int(input()))
if L[i]%2 == 0:
C1 += 1
if L[i] < Min1:
Min1 = L[i]
else:
C2 += 1
if L[i] < Min2:
Min2 = L[i]
if C1 <= C2:
print(Min1)
else:
print(Min2)
def ReadListString(n):
L = []
for i in range(0, n):
L.append(input())
return L
def MinBy(l, f):
return min(filter(lambda x: f(x), l))
L = ReadListString(20)
EvenCount = len(list(filter(lambda x: x%2 == 0, L)))
if EvenCount <= len(L) - EvenCount:
print(MinBy(L, lambda x: x%2 == 0))
else:
print(MinBy(L, lambda x: x%2 != 0))
Смотрите также: реализация на PascalABC.Net.
Задача 3
правитьДан целочисленный массив из 2000 элементов. Если сумма всех элементов массива чётная, нужно вывести количество нечётных (по значению) элементов массива, если нечётная – количество чётных. Например, для массива из 6 элементов, равных соответственно 2, 6, 12, 17, 3, 8, ответом будет 2 – количество нечётных элементов, так как общая сумма всех элементов чётна.
N = 2000
L = list()
S = 0
K1, K2 = 0, 0
for i in range(N):
L.append(int(input()))
S += L[i]
if L[i]%2 == 0:
K1 += 1
else:
K2 += 1
if S%2 == 0:
print(K2)
else:
print(K1)
def ReadListInteger(n):
L = []
for i in range(0, n):
L.append(int(input()))
return L
L = ReadListInteger(20)
if sum(L)%2 == 0:
print(len(filter(lambda x: x%2 != 0, L)))
else:
print(len(filter(lambda x: x%2 == 0, L)))
Смотрите также: реализация на PascalABC.Net.
Задача 4
правитьДан целочисленный массив из 20 элементов. Элементы массива могут принимать целые значения от –10 000 до 10 000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых хотя бы одно число делится на 3. В данной задаче под парой подразумевается два подряд идущих элемента массива.
N = 20
L = list()
K = 0
for i in range(N):
L.append(int(input()))
for i in range(N - 1):
if L[i]%3 == 0 or L[i + 1]%3 == 0:
K += 1
print(K)
Смотрите также: реализация на PascalABC.Net.
Задача 5
правитьДан целочисленный массив из 40 элементов. Элементы массива могут принимать целые значения от 0 до 10000 включительно. Опишите на естественном языке или на одном из языков программирования алгоритм, позволяющий найти и вывести количество пар элементов массива, в которых десятичная запись хотя бы одного числа оканчивается на 5.
N = 40
L = list()
K = 0
for i in range(N):
L.append(int(input()))
for i in range(N):
for j in range(i + 1, N):
if L[i]%10 == 5 or L[j]%10 == 5:
K += 1
print(K)
Смотрите также: реализация на PascalABC.Net.
Математические задачи
правитьЗадача о принадлежности точки кольцу
правитьimport math
R1, R2 = float(input()), float(input())
X, Y = float(input()), float(input())
if R1 > R2:
R1, R2 = R2, R1
D = math.sqrt(X**2 + Y**2)
if D > R1 and D < R2:
print('Точка внутри кольца.')
else:
print('Точка вне кольца.')
Смотрите также: реализация на PascalABC.Net.
Задача о решении уравнений
правитьimport math
A, B, C = float(input()), float(input()), float(input())
D = B**2 - 4*A*C
if D >= 0:
d2 = math.sqrt(D)
a2 = 2*A
X1 = (-B + d2)/a2
X2 = (-B + d2)/a2
if X1 == X2:
print('Найден один корень, равный {0}'.format(X1))
else:
print('Найдены два корня, равные {0} и {1}'.format(X1, X2))
else:
print('Ошибка нахождения корней: недопустимое значение {0} для D (< 0).'.format(D))