Как найти однозначное число в питоне

Найти однозначное число которое получается вычислением суммы цифр шестнадцатеричного числа(беззнаковое) n (повторно).

Пример:

40820A2 -> 4 + 0 + 8 + 2 + 0 + A + 2 = 1A;
1A -> 1 + A = B

Т.е. происходит преобразование

40820A2 -> B

Harry's user avatar

Harry

214k15 золотых знаков117 серебряных знаков229 бронзовых знаков

задан 7 мар 2021 в 9:55

TigerTV.ru's user avatar

TigerTV.ruTigerTV.ru

3,1851 золотой знак10 серебряных знаков21 бронзовый знак

4

Ы?

print(hex(int(input(),16)%15))

С учетом замечания @Danis

r = int(input(),16)%15 
print(hex(r if r > 0 else 15))

Да, еще если исходное значение 0 — то 0…

ответ дан 7 мар 2021 в 11:52

Harry's user avatar

HarryHarry

214k15 золотых знаков117 серебряных знаков229 бронзовых знаков

9

def fun(num):
    return num if len(num) < 2 else fun(hex(sum(int(c, 16) for c in num))[2:])

тесты:

In [125]: fun("40820A2")
Out[125]: 'b'

In [126]: fun("1234ae678d9f")
Out[126]: '2'

ответ дан 7 мар 2021 в 10:09

MaxU - stand with Ukraine's user avatar

2

0 / 0 / 0

Регистрация: 24.02.2022

Сообщений: 5

1

Определите, какое число введено с клавиатуры: однозначное, двузначное

24.02.2022, 19:20. Показов 5708. Ответов 1


Студворк — интернет-сервис помощи студентам

Определите, какое число введено с клавиатуры: однозначное, двузначное или количество цифр больше двух



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

24.02.2022, 19:20

1

avdivo

300 / 210 / 112

Регистрация: 03.12.2016

Сообщений: 409

24.02.2022, 23:23

2

Лучший ответ Сообщение было отмечено mik-a-el как решение

Решение

doubletrobl0,

Python
1
2
3
4
5
6
7
x = input()
if len(x) == 1:
    print('Однозначное')
elif len(x) == 2:
    print('Двузначное')
else:
    print('Количество цифр больше двух')



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

24.02.2022, 23:23

Помогаю со студенческими работами здесь

Написать программу, считывающую целое число с клавиатуры и предупреждающую вас, если введено нецелое число.
Написать программу, считывающую целое число с клавиатуры и предупреждающую вас, если введено…

Определить, какое число введено пользователем: положительное, отрицательное или равное 0
Помогите пожалуйста написать программу (на языке Си), которое определяет какое введенное число…

Стандартные функции Си для проверки какое число введено (целое или десятичное)
Помогите пожалуйста. Какие в Си есть стандартные функции, чтобы проверить какое введено число (…

Определить, делится ли двузначное число, введенное с клавиатуры дисплея, на 9
Двузначное число делится на 9, если сумма его цифр делится на 9. Определить, делится ли …

Определите, какое наименьшее число операций необходимо, чтобы получить из числа 1 число N
Имеется калькулятор, который выполняет три операции:
1. Прибавить к числу X единицу.
2. Умножить…

С клавиатуры ввоядтся числа, пока не будет введено, число, делящееся на 5
С клавиатуры вводятся натуральные числа, пока не будет введено число, делящееся на 5.

Вывести на…

Определите, какое наименьшее число операций необходимо для того, чтобы получить из числа 1 заданное число N
Имеется калькулятор, который выполняет три операции:

Прибавить к числу X единицу.
Умножить…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

2

Here’s a way to do it without turning it into a string first (based on some rudimentary benchmarking, this is about twice as fast as stringifying n first):

>>> n = 43365644
>>> [(n//(10**i))%10 for i in range(math.ceil(math.log(n, 10))-1, -1, -1)]
[4, 3, 3, 6, 5, 6, 4, 4]

Updating this after many years in response to comments of this not working for powers of 10:

[(n//(10**i))%10 for i in range(math.ceil(math.log(n, 10)), -1, -1)][bool(math.log(n,10)%1):]

The issue is that with powers of 10 (and ONLY with these), an extra step is required. —So we use the remainder in the log_10 to determine whether to remove the leading 0— We can’t exactly use this because floating-point math errors cause this to fail for some powers of 10. So I’ve decided to cross the unholy river into sin and call upon regex.

In [32]: n = 43

In [33]: [(n//(10**i))%10 for i in range(math.ceil(math.log(n, 10)), -1, -1)][not(re.match('10*', str(n))):]
Out[33]: [4, 3]

In [34]: n = 1000

In [35]: [(n//(10**i))%10 for i in range(math.ceil(math.log(n, 10)), -1, -1)][not(re.match('10*', str(n))):]
Out[35]: [1, 0, 0, 0]

Числа в Python 3: целые, вещественные, комплексные. Работа с числами и операции над ними.

Целые числа (int)

Числа в Python 3 ничем не отличаются от обычных чисел. Они поддерживают набор самых обычных математических операций:

x + y Сложение
x — y Вычитание
x * y Умножение
x / y Деление
x // y Получение целой части от деления
x % y Остаток от деления
-x Смена знака числа
abs(x) Модуль числа
divmod(x, y) Пара (x // y, x % y)
x ** y Возведение в степень
pow(x, y[, z]) xy по модулю (если модуль задан)

Также нужно отметить, что целые числа в python 3, в отличие от многих других языков, поддерживают длинную арифметику (однако, это требует больше памяти).

>>> 255 + 34
289
>>> 5 * 2
10
>>> 20 / 3
6.666666666666667
>>> 20 // 3
6
>>> 20 % 3
2
>>> 3 ** 4
81
>>> pow(3, 4)
81
>>> pow(3, 4, 27)
0
>>> 3 ** 150
369988485035126972924700782451696644186473100389722973815184405301748249

Битовые операции

Над целыми числами также можно производить битовые операции

x | y Побитовое или
x ^ y Побитовое исключающее или
x & y Побитовое и
x << n Битовый сдвиг влево
x >> y Битовый сдвиг вправо
~x Инверсия битов

Дополнительные методы

int.bit_length() — количество бит, необходимых для представления числа в двоичном виде, без учёта знака и лидирующих нулей.

>>> n = -37
>>> bin(n)
'-0b100101'
>>> n.bit_length()
6

int.to_bytes(length, byteorder, *, signed=False) — возвращает строку байтов, представляющих это число.

>>> (1024).to_bytes(2, byteorder='big')
b'x04x00'
>>> (1024).to_bytes(10, byteorder='big')
b'x00x00x00x00x00x00x00x00x04x00'
>>> (-1024).to_bytes(10, byteorder='big', signed=True)
b'xffxffxffxffxffxffxffxffxfcx00'
>>> x = 1000
>>> x.to_bytes((x.bit_length() // 8) + 1, byteorder='little')
b'xe8x03'

classmethod int.from_bytes(bytes, byteorder, *, signed=False) — возвращает число из данной строки байтов.

>>> int.from_bytes(b'x00x10', byteorder='big')
16
>>> int.from_bytes(b'x00x10', byteorder='little')
4096
>>> int.from_bytes(b'xfcx00', byteorder='big', signed=True)
-1024
>>> int.from_bytes(b'xfcx00', byteorder='big', signed=False)
64512
>>> int.from_bytes([255, 0, 0], byteorder='big')
16711680

Системы счисления

Те, у кого в школе была информатика, знают, что числа могут быть представлены не только в десятичной системе счисления. К примеру, в компьютере используется двоичный код, и, к примеру, число 19 в двоичной системе счисления будет выглядеть как 10011. Также иногда нужно переводить числа из одной системы счисления в другую. Python для этого предоставляет несколько функций:

  • int([object], [основание системы счисления]) — преобразование к целому числу в десятичной системе счисления. По умолчанию система счисления десятичная, но можно задать любое основание от 2 до 36 включительно.
  • bin(x) — преобразование целого числа в двоичную строку.
  • hex(х) — преобразование целого числа в шестнадцатеричную строку.
  • oct(х) — преобразование целого числа в восьмеричную строку.

Примеры:

>>> a = int('19') # Переводим строку в число
>>> b = int('19.5')  # Строка не является целым числом
Traceback (most recent call last):
  File "", line 1, in
ValueError: invalid literal for int() with base 10: '19.5'
>>> c = int(19.5)  # Применённая к числу с плавающей точкой, отсекает дробную часть
>>> print(a, c)
19 19
>>> bin(19)
'0b10011'
>>> oct(19)
'0o23'
>>> hex(19)
'0x13'
>>> 0b10011  # Так тоже можно записывать числовые константы
19
>>> int('10011', 2)
19
>>> int('0b10011', 2)
19

Вещественные числа (float)

Вещественные числа поддерживают те же операции, что и целые. Однако (из-за представления чисел в компьютере) вещественные числа неточны, и это может привести к ошибкам:

>>> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1
0.9999999999999999

Для высокой точности используют другие объекты (например Decimal и Fraction)).

Также вещественные числа не поддерживают длинную арифметику:

>>> a = 3 ** 1000
>>> a + 0.1
Traceback (most recent call last):
  File "", line 1, in
OverflowError: int too large to convert to float

Простенькие примеры работы с числами:

>>> c = 150
>>> d = 12.9
>>> c + d
162.9
>>> p = abs(d - c)  # Модуль числа
>>> print(p)
137.1
>>> round(p)  # Округление
137

Дополнительные методы

float.as_integer_ratio() — пара целых чисел, чьё отношение равно этому числу.

float.is_integer() — является ли значение целым числом.

float.hex() — переводит float в hex (шестнадцатеричную систему счисления).

classmethod float.fromhex(s) — float из шестнадцатеричной строки.

>>> (10.5).hex()
'0x1.5000000000000p+3'
>>> float.fromhex('0x1.5000000000000p+3')
10.5

Помимо стандартных выражений для работы с числами (а в Python их не так уж и много), в составе Python есть несколько полезных модулей.

Модуль math предоставляет более сложные математические функции.

>>> import math
>>> math.pi
3.141592653589793
>>> math.sqrt(85)
9.219544457292887

Модуль random реализует генератор случайных чисел и функции случайного выбора.

>>> import random
>>> random.random()
0.15651968855132303

Комплексные числа (complex)

В Python встроены также и комплексные числа:

>>> x = complex(1, 2)
>>> print(x)
(1+2j)
>>> y = complex(3, 4)
>>> print(y)
(3+4j)
>>> z = x + y
>>> print(x)
(1+2j)
>>> print(z)
(4+6j)
>>> z = x * y
>>> print(z)
(-5+10j)
>>> z = x / y
>>> print(z)
(0.44+0.08j)
>>> print(x.conjugate())  # Сопряжённое число
(1-2j)
>>> print(x.imag)  # Мнимая часть
2.0
>>> print(x.real)  # Действительная часть
1.0
>>> print(x > y)  # Комплексные числа нельзя сравнить
Traceback (most recent call last):
  File "", line 1, in
TypeError: unorderable types: complex() > complex()
>>> print(x == y)  # Но можно проверить на равенство
False
>>> abs(3 + 4j)  # Модуль комплексного числа
5.0
>>> pow(3 + 4j, 2)  # Возведение в степень
(-7+24j)

Для работы с комплексными числами используется также модуль cmath.

Для вставки кода на Python в комментарий заключайте его в теги <pre><code class=»python3″>Ваш код</code></pre>

Замечания по предыдущему листку

Обмен значений в питоне

Обмен значений двух переменных в языке Питон легко делается так:

(a, b) = (b, a)

Здесь в круглых скобках записан кортеж — последовательность из нескольких элементов.
Одному кортежу можно присвоить значение другого кортежа.
Этим можно пользоваться, если нужно одновременно изменить несколько переменных, например, возможна такая запись:

(x, y, z) = (x + y, y + z, z + x)

На самом деле скобки при этом можно не писать:

a, b = b, a

Совсем на самом деле…

Если забраться совсем в дебри, то при выполнении конструкции

a, b = b, a

не создаются кортежи, хотя выглядит всё именно так.
Питон сначала любую программу превращает в то, что называется байткод.
Байткод уже выполняется достаточно «просто» и прямолинейно.

Без объяснения подробностей байткод для кода выше выглядит так:

              0 LOAD_FAST                1 (b)
              2 LOAD_FAST                0 (a)
              4 ROT_TWO
              6 STORE_FAST               0 (a)
              8 STORE_FAST               1 (b)

Если сохранить промежуточный кортеж в переменную, то получится так:

tup = (b, a)
a, b = tup
              0 LOAD_FAST                1 (b)
              2 LOAD_FAST                0 (a)
              4 BUILD_TUPLE              2
              6 STORE_FAST               2 (tup)
              8 LOAD_FAST                2 (tup)
             10 UNPACK_SEQUENCE          2
             12 STORE_FAST               0 (a)
             14 STORE_FAST               1 (b)

Целочисленное округление вверх

В задаче «автопробег» необходимо было найти целочисленное частное от деления m на n с округлением вверх.
Обычно это делается на основе известного математического факта: (m + n - 1) // n.

Синтаксис условной инструкции

Все ранее рассматриваемые программы имели линейную структуру: все инструкции выполнялись последовательно одна за одной, каждая записанная инструкция обязательно выполняется.

if-else

Допустим мы хотим по данному числу $x$ определить его абсолютную величину (модуль).
Программа должна напечатать значение переменной $x$, если $x>0$ или же величину $-x$ в противном случае.
Линейная структура программы нарушается: в зависимости от справедливости условия $x>0$ должна быть выведена одна или другая величина.
Соответствующий фрагмент программы на Питоне имеет вид:

x = int(input())
if x > 0:
    print(x)
else:
    print(-x)

В этой программе используется условная инструкция if (если). После слова if
указывается проверяемое условие (x > 0), завершающееся двоеточием.
После этого идёт блок (последовательность) инструкций, который будет выполнен,
если условие истинно, в нашем примере это вывод на экран величины x.
Затем идёт слово else (иначе), также завершающееся двоеточием, и блок инструкций, который будет выполнен,
если проверяемое условие неверно, в данном случае будет выведено значение -x.

Итак, условная инструкция в Питоне имеет следующий синтаксис:

if Условие:
    Блок_инструкций_1
else:
    Блок_инструкций_2

Блок_инструкций_1 будет выполнен, если Условие истинно.
Если Условие ложно, будет выполнен Блок_инструкций_2.

if-else

В условной инструкции может отсутствовать слово else и последующий блок.
Такая инструкция называется неполным ветвлением.
Например, если дано число x и мы хотим заменить его на абсолютную величину x, то это можно сделать следующим образом:

if x < 0:
    x = -x
print(x)

В этом примере переменной $x$ будет присвоено значение $-x$, но только в том случае, когда $x < 0$.
А вот инструкция print(x) будет выполнена всегда, независимо от проверяемого условия.

Кстати, получить модуль числа можно и сразу при помощи функции abs(x).
Так как школьники редко внимательно читают тексты, то немногие сумеют воспользоваться этим знанием в задаче про ход слона :)

Для выделения блока инструкций, относящихся к инструкции if или else в
языке Питон используются отступы. Все инструкции, которые относятся к одному блоку, должны иметь
равную величину отступа, то есть одинаковое число пробелов в начале строки. Рекомендуется
использовать отступ в 4 пробела и не рекомедуется использовать в качестве отступа символ
табуляции.

Это одно из существенных отличий синтаксиса Питона от синтаксиса большинства языков, в которых
блоки выделяются специальными словами, например, нц... кц в Кумире, begin... end
в Паскале или фигурными скобками в Си.

Операторы сравнения

Как правило, в качестве проверяемого условия используется результат вычисления
одного из следующих операторов сравнения:

<
Меньше — условие верно, если первый операнд меньше второго.
>
Больше — условие верно, если первый операнд больше второго.
<=
Меньше или равно.
>=
Больше или равно.
==
Равенство. Условие верно, если два операнда равны.
!=
Неравенство. Условие верно, если два операнда неравны.

Например, условие (x * x < 1000) означает «значение x * x меньше 1000»,
а условие (2 * x != y) означает «удвоенное значение переменной x
не равно значению переменной y».

Операторы сравнения в Питоне можно объединять в цепочки (в отличии от большинства других языков программирования,
где для этого нужно использовать логические связки), например, a == b == c или 1 <= x <= 10.

A: Максимум двух чисел

Даны два целых числа. Выведите значение наибольшего из них.

if-else

Каскадные условные инструкции

Если все случаи не ограничиваются двумя, то можно добавлять дополнительные проверки.
Получится конструкция if... elif... else.
Покажем это на примере программы, которая по данным ненулевым числам $x$ и $y$ определяет, в какой из четвертей координатной плоскости находится точка
$(x,y)$:

x = int(input())
y = int(input())
if x > 0 and y > 0:
    print("Первая четверть")
elif x > 0 and y < 0:
    print("Четвёртая четверть")
elif y > 0:
    print("Вторая четверть")
else:
    print("Третья четверть")

В такой конструкции условия if, …, elif проверяются по очереди, выполняется блок,
соответствующий первому из истинных условий.
Если все проверяемые условия ложны, то выполняется блок else, если он присутствует.

B: Какое число больше?

Даны два целых числа. Программа должна вывести число 1, если первое число больше второго,
число 2, если второе больше первого или число 0, если они равны.

Эту задачу желательно решить с использованием каскадных инструкций if... elif... else.

C: Считалка

Три ребёнка выбирают водящего при помощи считалки. Определите, на ком из них закончится
считалка, если в считалке (N) слов.

В первых трёх строках записаны имена трёх школьников, а затем записано целое положительное
число (N). Программа должна вывести одно из этих трёх имён, в зависимости от значения (N).

Эту задачу желательно решить с использованием инструкций if... elif... else.

D: Кружочки

Дана цифра (то есть однозначное число).
Определите, сколько «кружочков» в изображении этой цифры при написании от руки.

E: Точный квадрат

Дано целое неотрицательное число. Если оно является квадратом целого числа, выведите YES,
иначе выведите NO.

Подсказка

Да как же ж его проверить-то?

Извлеките корень из этого числа. Приведите результат к типу int, возведите
в квадрат и сравните с данным числом.

Логические операторы

Иногда нужно проверить одновременно не одно, а несколько условий.
Например, проверить, является ли данное число чётным можно при помощи
условия (n % 2 == 0)
(остаток от деления n на 2 равен 0),
а если необходимо проверить, что два данных целых числа n и m являются
чётными, необходимо проверить справедливость обоих условий: n % 2 == 0
и m % 2 == 0, для чего их необходимо объединить при помощи оператора and
(логическое И): n % 2 == 0 and m % 2 == 0.

Вообще в питоне, как уже говорилось, можно писать if n % 2 == m % 2 == 0:.
Но не все логические связки можно так записать.

Стандартные логические операторы: логическое И, логическое ИЛИ, логическое отрицание.

Логическое И является бинарным оператором
(то есть оператором с двумя операндами: левым и правым)
и имеет вид and.
Оператор and возвращает True тогда и только
тогда, когда оба его операнда имеют значение True.

Логическое ИЛИ является бинарным оператором и возвращает True тогда и только
тогда, когда хотя бы один операнд равен True. Оператор «логическое ИЛИ» имеет
вид or.

Логическое НЕ (отрицание) является унарным (то есть с одним операндом)
оператором и имеет вид not, за которым
следует единственный операнд. Логическое НЕ возвращает True,
если операнд равен False и наоборот.

Пример. Проверим, что хотя бы одно из чисел a или b оканчивается на 0:

if a % 10 == 0 or b % 10 == 0:

Проверим, что число a — положительное, а b — неотрицательное:

if a > 0 and not (b < 0):

Или можно вместо not (b < 0) записать (b >= 0).

F: Существует ли треугольник?

Даны три натуральных числа $a$, $b$, $c$. Определите, существует ли треугольник с такими сторонами.
Если треугольник существует, выведите строку YES, иначе выведите строку NO.

Треугольник — это три точки, не лежащие на одной прямой.

G: Ход ладьи

Шахматная ладья ходит по горизонтали или вертикали. Даны две различные клетки шахматной доски, определите,
может ли ладья попасть с первой клетки на вторую одним ходом. Программа получает на вход четыре числа
от 1 до 8 каждое, задающие номер столбца и номер строки сначала для первой клетки, потом для второй клетки.
Программа должна вывести YES, если из первой клетки ходом ладьи можно попасть во вторую или NO в противном случае.

H: Ход слона

Решите аналогичную задачу для слона, который ходит по диагонали.

Тип данных bool

Операторы сравнения возвращают значения специального логического типа bool.
Значения логического типа могут принимать одно из двух значений: True (истина) или False (ложь).
Если преобразовать логическое True к типу int, то получится 1, а преобразование False даст 0.
При обратном преобразовании число 0 преобразуется в False, а любое ненулевое число в True.
При преобразовании str в bool пустая строка преобразовывается в False, а любая непустая строка в True.

Суммируем логические выражения

>>> True == 1
True
>>> False == 0
True

То свойство, что истина и ложь при превращении в числа равны 1 и 0 соответственно, позволяет писать кратко некоторые вещи.
Например, пусть у нас есть числа a, b, c, и мы хотим узнать, сколько из них больше нуля.
Вместо громоздкой конструкции

res = 0
if a > 0:
    res += 1
if b > 0:
    res += 1
if c > 0:
    res += 1

можно написать коротко

res = (a > 0) + (b > 0) + (c > 0)

Так как сравнения возвращают значения, то их можно сохранить в переменную.
Иногда это позволяет сделать код более читаемым.
Вместо

if первое_сложное_громоздкое_условие_чтобы_понять_слева_ли or второе_сложное_громоздкое_условие_чтобы_понять_сверху_ли:
    ...

можно писать

on_the_left = первое_сложное_громоздкое_условие_чтобы_понять_слева_ли
on_the_top = второе_сложное_громоздкое_условие_чтобы_понять_сверху_ли
if on_the_left or on_the_top:
    ...

I: Ход ферзя

Решите аналогичную задачу для ферзя, который ходит как ладья и слон (то есть по горизонтали, вертикали или диагонали).

Вложенные условные инструкции

Внутри условных инструкций можно использовать любые инструкции языка Питон,
в том числе и условную инструкцию. Получаем вложенное ветвление —
после одной развилки в ходе исполнения программы появляется другая развилка.
При этом вложенные блоки имеют больший размер отступа (например, 8 пробелов).
Покажем это на примере программы, которая по данным ненулевым числам $x$
и $y$ определяет, в какой из четвертей координатной плоскости находится точка
$(x,y)$:

x = int(input())
y = int(input())
if x > 0:
    if y > 0:               # x>0, y>0
        print("Первая четверть")
    else:                   # x>0, y<0
        print("Четвёртая четверть")
else:
    if y > 0:               # x<0, y>0
        print("Вторая четверть")
    else:                   # x<0, y<0
        print("Третья четверть")

В этом примере мы использовали комментарии — текст,
который интерпретатор игнорирует. Комментариями в Питоне является символ # и весь текст после этого символа
до конца строки.

J: Максимум трёх чисел

Даны три целых числа. Найдите наибольшее из них (программа должна вывести ровно одно целое число).

Какое наименьшее число сравнений (>, <, >=, <=) нужно выполнить, для нахождения наибольшего из трех чисел?
Решите задачу с использованием минимального числа сравнений.

K: Шахматная доска

Заданы две клетки шахматной доски. Если они покрашены в один цвет, то выведите слово YES, а если в разные
цвета — то NO.

L: Ход короля

Решите аналогичную задачу для короля, который может ходить в клетку, которая является соседней с данной по стороне или углу.

M: Ход коня

Решите аналогичную задачу для коня, который ходит буквой «Г» — на две клетки по вертикали в любом
направлении и на одну клетку по горизонтали, или наоборот.

N: Коровы

Для данного числа n<100 закончите фразу «На лугу пасётся…»
одним из возможных продолжений: «n коров», «n корова», «n коровы»,
правильно склоняя слово «корова».
Программа должна вывести введённое число n и одно из слов: коров, корова
или коровы. Между числом и словом должен стоять ровно один пробел.

O: Тип треугольника

Даны три стороны треугольника $a$, $b$, $c$.
Определите тип треугольника с заданными сторонами.
Выведите одно из четырёх слов:
rectangular для прямоугольного треугольника,
acute для остроугольного треугольника,
obtuse для тупоугольного треугольника или impossible, если треугольника с такими
сторонами не существует.

P: Билеты на метро — 1

Давным-давно билет на одну поездку в метро стоил 15 рублей, билет на 10 поездок стоил 125 рублей,
билет на 60 поездок стоил 440 рублей.
Пассажир планирует совершить n поездок. Определите, сколько билетов каждого вида он должен приобрести,
чтобы суммарное количество оплаченных поездок было не меньше n, а общая стоимость приобретённых билетов — минимальна.

Программа получает на вход одно число n и должна вывести
три целых числа, равных необходимому количеству билетов на 1, на 10, на 60 поездок.

Q: Упорядочить три числа

Дано три числа. Упорядочите их в порядке неубывания. Программа должна считывать
три числа a, b, c, затем программа должна менять
их значения так, чтобы стали выполнены условия a <= b <= c,
затем программа выводит тройку a, b, c.

Дополнительные ограничения: нельзя использовать дополнительные переменные
(то есть единственной допустимой операцией присваивания является обмен значений
двух переменных типа (a, b) = (b, a).

Какое наименьшее число сравнений необходимо для решения этой задачи (если не использовать никаких обходных манёвров)?
Почему нельзя обойтись меньшим числом сравнений?
Решите эту задачу, используя минимальное количество сравнений.

R: Узник замка Иф

За многие годы заточения узник замка Иф проделал в стене прямоугольное отверстие размером
D×E. Замок Иф сложен из кирпичей, размером A×B×C. Определите, сможет ли
узник выбрасывать кирпичи в море через это отверстие, если стороны кирпича должны быть
параллельны сторонам отверстия.

Программа получает на вход числа A, B, C, D, E и должна вывести слово YES
или NO.

S: Коробки

Есть две коробки, первая размером A1×B1×C1,
вторая размером A2×B2×C2. Определите, можно
ли разместить одну из этих коробок внутри другой, при условии, что поворачивать
коробки можно только на 90 градусов вокруг рёбер.

Программа получает на вход числа A1, B1, C1,
A2, B2, C2. Программа должна вывести одну из следующих строчек:

Boxes are equal, если коробки одинаковые,

The first box is smaller than the second one, если первая коробка может быть положена во вторую,

The first box is larger than the second one, если вторая коробка может быть положена в первую,

Boxes are incomparable, во всех остальных случаях.

1
2
3
3
2
1

Boxes are equal

3
4
5
2
4
6

Boxes are incomparable

T: Яша плавает в бассейне

Яша плавал в бассейне размером (Ntimes M) метров и устал. В этот момент он обнаружил,
что находится на расстоянии x метров от одного из длинных бортиков
(не обязательно от ближайшего) и y метров от одного из коротких бортиков.
Какое минимальное расстояние должен проплыть Яша, чтобы выбраться из бассейна на бортик?

Программа получает на вход числа (N), (M), (x), (y). Программа должна вывести число
метров, которое нужно проплыть Яше до бортика.

U: Пересадки

На Новом проспекте для разгрузки было решено пустить два новых автобусных маршрута на разных участках проспекта.
Известны конечные остановки каждого из автобусов. Определите количество остановок, на которых можно пересесть с одного автобуса на другой.

Вводятся четыре числа – номера конечных остановок сначала первого, потом второго автобуса.

Ваша программа должна выводить одно число – искомое количество остановок.

V: Два прямоугольника

Петя нарисовал на клетчатом листке бумаги красивый рисунок прямоугольной формы.
Его младшему брату Васе тоже захотелось порисовать, поэтому он вырезал из того же листка бумаги другой прямоугольник.
При этом он не делал лишних разрезов, то есть в результате в листке осталась прямоугольная дырка.
Кроме того, линии разреза не проходили (даже частично) по границам рисунка Пети.
Более того, по границам рисунка не проходили даже продолжения линий разреза.

Ваша задача – по данным о расположении рисунка и прямоугольной дырки определить,
испортил ли Вася рисунок старшего брата, другими словами, есть ли на вырезанном Васей прямоугольнике хотя бы маленький фрагмент рисунка Пети.

Вам даны 8 целых чисел —
(x_1), (y_1), (x_2), (y_2), (x_3), (y_3), (x_4), (y_4), где
((x_1,y_1)) — координаты левого нижнего угла рисунка Пети,
((x_2,y_2)) — координаты правого верхнего угла рисунка. Аналогично,
((x_3,y_3)) — координаты левого нижнего угла вырезанного Васей прямоугольника,
((x_4,y_4)) — координаты правого верхнего угла вырезанного прямоугольника. Гарантируется, что данные прямоугольники невырождены
((x_1lt x_2), (y_1lt y_2) и аналогичные неравенства для второго набора координат).

Выведите YES, если Вася испортил рисунок, и NO в противном случае.

Тесты к этой задаче закрытые.

W★: Билеты на метро — 2

Решите предыдущую задачу при наличии следующих билетов:
1 поездка — 15 рублей,
5 поездок — 70 рублей,
10 поездок — 125 рублей,
20 поездок — 230 рублей,
60 поездок — 440 рублей.

Программа получает на вход одно число $n$ и должна вывести
пять целых чисел: количество билетов на 1, 5, 10, 20, 60 поездок, которое необходимо приобрести.
Если для какого-то данного $n$ существует несколько способов приобретения билетов одинаковой суммарной стоимости,
необходимо вывести ту комбинацию билетов, которая даёт большее число поездок.

X: Складирование ноутбуков

На склад, который имеет форму прямоугольного параллелепипеда, привезли ноутбуки, упакованные в коробки.
Каждая коробка также имеет форму прямоугольного параллелепипеда. По правилам хранения коробки с ноутбуками
должны быть размещены на складе с выполнением следующих двух условий:

1. Стороны коробок должны быть параллельны сторонам склада.

2. Коробку при помещении на склад разрешается расположить где угодно
(с выполнением предыдущего условия), в том числе на другой коробке, но все коробки должны быть ориентированы
одинаково (т.е. нельзя одну коробку расположить «стоя», а другую —«лёжа»)

Напишите программу, которая по размерам склада и размерам коробки с ноутбуком определит максимальное количество
ноутбуков, которое может быть размещено на складе. Программа получает на вход шесть натуральных чисел.
Первые три задают длину, высоту и ширину склада. Следующие три задают соответственно длину, высоту и ширину коробки с ноутбуком.
Программа должна вывести одно число — максимальное количество ноутбуков, которое может быть размещено на складе.

100
200
300
1
2
3

1000000

100
200
300
3
2
1

1000000

Y: Расстановка ноутбуков

В школе решили на один прямоугольный стол поставить два прямоугольных ноутбука.

Ноутбуки нужно поставить так, чтобы их стороны были параллельны сторонам стола.

Определите, какие размеры должен иметь стол, чтобы оба ноутбука на него поместились, и площадь стола была минимальна.

Вводится четыре натуральных числа, первые два задают размеры одного ноутбука, а следующие два — размеры второго. Числа не превышают 1000.

Выведите два числа — размеры стола. Если возможно несколько ответов, выведите любой из них (но только один).

Тесты к этой задаче закрытые.

Тернарный оператор условия

В языке питон есть тернарная условная операция, подобная [expression]?[on_true]:[on_false] в языке си.
Тернарная условная операция принимает на вход три параметра: логическое выражение и два значения,
и возвращает первое или второе значение в зависимости от значения логического выражения.
Его синтаксис такой:

[on_true] if [expression] else [on_false]
>>> 'equal' if 1 == 1 else 'not equal'
'equal'
>>> 'equal' if 1 == 2 else 'not equal'
'not equal'

Данную конструкцию можно вкладывать в себя:

res = 'больше' if x > 0 else 'меньше' if x < 0 else 'ноль'

Ситуация, когда тернарный оператор уместен, встречается не так часто.

Z★: Римские числа

Дано натуральное число (N) от 1 до 3999. Выведите его запись римскими цифрами.

ZA: Котлеты

На сковородку одновременно можно положить (k) котлет.
Каждую котлету нужно с каждой стороны обжаривать (m) минут непрерывно.
За какое наименьшее время удастся поджарить с обеих сторон (n) котлет?

Программа получает на вход три числа: (k), (m) и (n) и должна вывести одно число:
наименьшее количество минут.

Тесты к этой задаче закрытые.

ZB: Аншлаг, аншлаг!

В одном из популярных кинотеатров все сеансы проходят с аншлагом, поэтому все места в зале всегда заняты.
К сожалению, расстояние между рядами в кинозале маленькое, и зрители, пробираясь перед началом фильма к своим местам,
вынуждены спотыкаться о ноги уже сидящих. Заходя в зал, зритель думает, с какой стороны ряда он будет
пробираться к своему месту (с левой или с правой), и выбирает сторону так, чтобы споткнуться о меньшее число людей.
В случае равенства зритель выбирает ту сторону, к которой его место ближе.

Вася, ярый любитель кино и столь же ярый ненавистник математики, первым купил билет на очередную премьеру.
Когда Вася вошёл в зал и сел на своё место, он увидел, что все остальные кресла в его ряду ещё пустуют.
Вася точно знал, что к началу сеанса зал заполнится до отказа, а это значило, что с минуты на минуту
о его ноги начнут спотыкаться другие кинолюбители, пробирающиеся к своим местам.
Несмотря на всю свою нелюбовь к математике, Вася мгновенно оценил, какое максимальное
количество человек может споткнуться о его ноги, прежде чем все зрители займут свои места. А вы сможете?

Программа получает на вход два целые числа $n$ и $k$ — количество мест в том ряду,
где сидит Вася, и номер его места соответственно ($1le k le n le 50$, $n$ — чётно).
Места в ряду нумеруются с единицы.

Программа должна Вывести максимальное количество человек, которое может споткнуться о ноги Васи.

Тесты к этой задаче закрытые.

ZC★: Длина удава

Как известно, длину Удава можно измерять Попугаями и Мартышками.
Оказалось, что длина Удава равна (n) целым Попугаям (и, возможно, ещё какая-то дробная часть Попугая) или (m) целым Мартышкам
(и, возможно, ещё какая-то дробная часть Мартышки). Определите, какая минимальная и максимальная
возможная длина Мартышки в Попугаях.

Программа получает на вход два целых числа (n) и (m),
каждое на своей строке — количество Попугаев и Мартышек в Удаве, соответственно.

Программа должна вывести два целых числа —
минимальную и максимальную возможную длину одной Мартышки в Попугаях.

Тесты к этой задаче закрытые.

ZD: Карточки

Вася выложил в ряд слева направо 100 карточек, на которых написаны числа 1, 2, 3, …, 100 соответственно (числами вниз).
После этого он поменял местами карточки, на которых написаны числа $i$ и $j$. Петя открывает карточки по очереди слева направо.
Какое минимальное количество карточек ему придется открыть, чтобы точно выяснить, какие карточки поменял местами Вася?

Программа получает на вход два числа $i$ и $j$ и должна вывести одно число — минимальное количество карточек, которое достаточно открыть Пете.

ZE★★: Настольный теннис

Вася, Петя и Коля играли в теннис навылет (проигравший пропускал следующую партию, уступая свое место третьему).
Вася утверждает, что сыграл $x$ партий, Петя — что сыграл y партий, Коля — z партий.

Определите, могло ли такое быть.

Программа получает на вход целых неотрицательных числа $x$, $y$, $z$
и должна вывести YES, если такое могло быть, и NO в противном случае.

Тесты к этой задаче закрытые.

Понравилась статья? Поделить с друзьями:
  • Как найти кисту яичка
  • Как найти оптимальное решение транспортной задачи
  • Как найти в контакте друга по имени
  • Как составить звуковую схему слова малина
  • Как найти обрыв теплых электрических полов