Книга программиста/Задачи на 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))))

Смотрите также: реализация на PascalABC.Net

Задачи К. ПоляковаПравить

==Стандартные функции==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. Необходимо вывести:

  1. минимальный чётный элемент, если количество чётных элементов не больше, чем нечётных;
  2. минимальный нечётный элемент, если количество нечётных элементов меньше, чем чётных.

Например, для массива из шести элементов, равных соответственно 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))

Смотрите также: реализация на PascalABC.Net.