C клавиатуры вводится трехзначное число вывести цифры этого числа на отдельных строках
Например, если было введено 349, программа должна вывести на экран число 16, так как 3 + 4 + 9 = 16.
Как извлечь отдельные цифры из числа? Если число разделить нацело на десять, в остатке будет последняя цифра этого числа. Например, если 349 разделить нацело на 10, то получится частное 34 и остаток 9. Если потом 34 разделить также, получится частное 3 и остаток 4; далее при делении 3 на 10 получим частное 0 и остаток 3.
В языках программирования почти всегда есть две операции:
1) нахождение целого при делении нацело,
2) нахождение остатка при делении нацело.
В языке программирования Python первая операция обозначается // (двумя знаками деления), а вторая - % (знаком процента). Например:
Примечание. Операции деления нацело и нахождения остатка с точки зрения арифметики применимы только к целым числам. Но в Python их можно использовать и по отношению к дробным числам:
Алгоритм нахождения суммы цифр трехзначного числа abc (где a - сотни, b - десятки и c - единицы) можно описать так:
- Найти остаток от деления abc на 10, записать его в переменную d1 . Это будет цифра c.
- Избавиться от цифры c в числе abc, разделив его нацело на 10.
- Найти остаток от деления ab на 10, записать его в переменную d2 . Это будет цифра b.
- Избавиться от цифры b в числе ab, разделив его нацело на 10.
- Число a однозначное. Это еще одна цифра исходного числа.
- Сложить оставшееся число a со значениями переменных d1 и d2 .
Пример выполнения программы:
Однако, если нам известно, что число состоит из трех разрядов (цифр), есть немного другой способ извлечения цифр из числа:
- Остаток от деления на 10 исходного числа дает последнюю цифру числа.
- Если найти остаток от деления на 100 исходного числа, то мы получи последние две цифры числа. Далее следует разделить полученное двухзначное число нацело на 10, и у нас окажется вторая цифра числа.
- Если исходное трехзначное число разделить нацело на 100, то получится первая цифра числа.
В Python данную задачу можно решить без использования арифметических действий, а путем извлечения из исходной строки отдельных символов с последующим их преобразованием к целому.
Задача может быть усложнена тем, что число вводится не пользователем с клавиатуры, а должно быть сгенерировано случайно. Причем обязательно трехзначное число.
В этом случае надо воспользоваться функциями randint() , randrange() или random() из модуля random . Первым двум функциям передаются диапазоны: randint(100, 999) , randrange(100, 1000) . Получить трехзначное число, используя random() немного сложнее:
Сегодня мы узнаем с вами, как отделить каждую цифру от числа начиная от младшего разряда, заканчивая старшим. Это нам частенько пригодится в дальнейшем.
Разделение числа на цифры
Идея алгоритма:
Для каждого числа необходимо найти его разряд.
- 1 => единица;
- 42 => 4 десятка и 2 единицы;
- 829 => 8 сотен, 2 десятка, 9 единиц.
Поиск разрядов числа
Нам дано число: 123456789
Последнюю цифру мы легко найдем, нам достаточно наше число разделить 10 с остатком. А что делать с предпоследней цифрой? Тут как минимум есть два варианта:
- /10 – откинули последнюю цифру, а затем снова %10;
- %10 и его степень. Способ довольно неудобный. Поэтому мы не будем им пользоваться.
Первый вариант кажется достаточно удобным. Мы будем получать нужную нам цифру в ходе каждой итерации цикла.
- 123456789 % 10 = 9;
- 123456789 / 10 = 12345678;
- Переходим к следующей итерации
- 12345678 % 10 = 8;
- 12345678 / 10 = 1234567;
И так далее пока не переберем все число.
Алгоритм разделения числа на цифры
- Ввести число a;
- Запустить цикл;
- Найти цифру при помощи a % 10;
- Вывести цифру (или использовать ее в задаче);
- Уменьшить а в 10 раз.
Этот цикл будет работать до тех пор, пока n не превратится в 0.
Стоит запомнить, что в данном случае цифры выводятся в обратном порядке.
Использование алгоритма
Мы можем применять данный алгоритм в этих случаях
- Анализ зависимостей в цифрах числа;
- Определение присутствия цифры;
- Подсчёт цифр;
- Подсчёт количества цифр;
- Замена цифр в числе;
- Анализ чисел в других системах счисления;
- Анализ бинарных данных.
Решение задач
Разбор задачи Счастливый билет
Например, мы хотим написать программу, которая проанализирует билет, который нам дали в автобусе, является он счастливым или нет? Если вы не помните или не знали, как это делается, напомню. Билет считается счастливым, когда сумма первых трех чисел равняется сумме трех последних.
Нам вводится номер билета и необходимо проверить, является ли он счастливым.
Давайте посчитаем. Посмотрите на номер нашего билета: 306 450.
- Если мы просуммируем 3+0+6 == 4+5+0;
- То получим в первой и второй сумме чисел одинаковое значение 9 == 9;
- Это означает, что наш билет счастливый.
Все элементарно, но теперь встает вопрос, как же нам разбить наше число на отдельные цифры? А мы уже знаем, как это сделать.
Алгоритм решения
- Ввести число;
- Разделять его на цифры;
- Первые три числа добавлять в sum1;
- Последние три числа добавлять в sum2;
- Сравнить sum1 и sum2.
Разложи на цифры
Дано восьмизначное число, необходимо написать в строку каждую цифру данного числа через пробел, начиная с разряда единиц.
Формат входных данных
Дано целое число N (10 000 000 Tags
При выполнении заданий используйте заготовки решений: -> Репозиторий.
В данной теме придерживайтесь следующих правил:
не используйте коллекции в любых задачах кроме задач из раздела «Коллекции» (до задачи № 4.2.29 ; например, если дана последовательность чисел, не нужно использовать списки, следует ввести каждое число с клавиатуры отдельно, не сохраняя их.
Использовать не изученные до сих пор конструкции языка (try, import и др.) запрещено.
4.2.1. Условный оператор¶
Рассчитать значение \(f\) при заданном значении вещественного числа \(x\) :
\[\beginПри выводе на экран оставьте 2 знака после запятой.
Определите максимальное и минимальное значения из двух различных целых чисел.
Вася пытается высунуть голову в форточку размерами \(a\) и \(b\) см. Приняв условно, что его голова - круглая диаметром \(d\) см, определите, сможет ли Вася сделать это. Для прохождения головы в форточку необходим зазор в \(1\) см. с каждой стороны.
Все величины - целые числа.
Известны год и номер месяца сегодняшнего дня, а также год и номер месяца рождения человека (нумерация месяцев с 1: январь - 1 и т.д.). Определите возраст человека (число полных лет).
Дана точка с целыми ненулевыми координатами \((x; y)\) . Определить номер четверти координатной плоскости, которой она принадлежит.
Даны вещественные числа \(a\) , \(b\) , \(c\) ( \(a \neq 0\) ).
Решите уравнение \(ax^2 + bx + c = 0\) . При выводе значений оставьте 1 знак после запятой.
4.2.2. Цикл с условием¶
Дана непустая последовательность целых чисел, оканчивающаяся нулем. Найти сумму и количество введенных чисел.
Дано число \(n\) . Из чисел \(0, 5, 10, 15, 20, 25, . \) напечатать те, которые не превышают \(n\) .
Дано вещественное число \(a\) . Найдите наименьшее натуральное \(n\) , для которого верно
Дано натуральное число. Определите сумму и количество его цифр.
Зная, что операция нахождения остатка от деления числа на 10 всегда возвращает его последнюю цифру, можно зациклить это деление, «отрезая» на каждой итерации найденную цифру, используя деление нацело:
где окончанием цикла будет наличие 0 в исходном числе.
Вывести в строку 10 первых натуральных чисел, оканчивающихся на цифру \(k\) , кратных числу \(s\) и находящихся в интервале, левая граница которого равна \(start\) .
4.2.3. Совместный цикл (цикл по коллекциям)¶
Даны целые числа \(a\) и \(b\) ( \(a\) может быть больше \(b\) ). Напечатайте:
числа от минимального до максимального в строчку (разделяя пробелом);
числа от максимального до минимального «столбиком».
Для введенных с клавиатуры положительных целых чисел \(a\) и \(b\) ( \(a \leq b\) ) определите:
сумму всех целых чисел от \(a\) до \(b\) ;
произведение всех целых чисел от \(a\) до \(b\) ;
среднее арифметическое всех целых чисел от \(a\) до \(b\) ;
среднее геометрическое нечетных чисел от \(a\) до \(b\) .
Отрезок поиска включает сами числа \(a\) и \(b\) . При выводе вещественных результатов оставьте два знака после запятой.
Начав тренировки, лыжник в первый день пробежал \(s\) км. ( \(s > 0\) , вещественное число). Каждый следующий день он увеличивал пробег на \(p\) % ( \(0 < p \leq 100\) , вещественное число) от пробега предыдущего дня. Определите:
пробег лыжника за второй, третий, …, десятый день тренировок;
какой суммарный путь он пробежал за первые 10 дней тренировок.
При выводе вещественных результатов оставьте один знак после запятой.
Известна масса каждого предмета в кг., загружаемого в грузовик. Определить, возможна ли перевозка груза, если грузоподъемность грузовика равна \(p\) кг.
В условии задачи ничего не сказано о количестве предметов, поэтому количество и массу каждого предмета необходимо спросить у пользователя. Аналогичного правила придерживайтесь и в других заданиях.
В области несколько районов. Заданы площади, засеваемые пшеницей (га.), и средняя урожайность (ц/га) в каждом районе.
Определите количество пшеницы, собранное по области. При выводе вещественных результатов оставьте один знак после запятой.
4.2.4. Прерывание и продолжение циклов¶
Решите задачу № 4.2.7 , организовав бесконечный цикл, который бы прерывался при выполнении условия, используя оператор break .
Простой способ организации бесконечного цикла:
Предложение, введенное с клавиатуры, содержит слова из гласных и согласных букв кириллицы (регистр может быть различный), а также пробелы.
Определите количество гласных и согласных букв в предложении. Для пропуска пробелов используйте оператор continue .
4.2.5. Комбинация циклов и условий¶
В данном разделе разрешается использовать любые комбинации циклов, однако, помните, что цикл for . in , как правило, проще, чем while и поэтому предпочтительнее.
Выведите на экран (в строку) все целые числа от \(a\) до \(b\) , кратные некоторому числу \(c\) .
Выведите на экран (в строку) все трехзначные натуральные числа, сумма цифр которых равна целому числу \(n\) ( \(0 < n \leq 27\) ).
Организуйте цикл, перебирающий все трехзначные числа, внутри которого разбейте число на цифры для проверки суммы.
Известно количество учеников в классе и их рост (см.); рост мальчиков условно задан отрицательными числами. Определите средний рост мальчиков и средний рост девочек.
При выводе вещественных результатов оставьте один знак после запятой.
Даны \(n\) вещественных чисел. Определите максимальное и минимальное из них.
При выводе вещественных результатов оставьте два знака после запятой.
Дано натуральное число \(n\) . Определите, является ли оно членом последовательности Фибоначчи .
Дано \(n\) вещественных чисел. Определите, является ли последовательность упорядоченной по возрастанию. В случае отрицательного ответа выведите порядковый номер числа, нарушающего такую упорядоченность.
Задачи такого типа удобно решать, используя «алгоритм с флажком». Флажок - значение, по которому можно определить ответ на вопрос, которое меняется в случае если условие выполнения алгоритма нарушено.
Например, можно принять, что флажок = 1 (считаем по умолчанию, что последовательность упорядочена по возрастанию). Далее, внутри цикла в случае нарушения последовательности флажок становится 0 и осуществляется выход из цикла. После цикла по флажку можно однозначно ответить на поставленный вопрос.
Пример (в качестве «флажка» используется переменная „index“ - индекс элемента, нарушающего порядок возрастания):
Выведите на экран таблицу умножения на \(n\) ( \(2 < n \leq 9\) ) в виде:
При написании вложенных циклов используйте внешний цикл для изменения значений по строкам (первый множитель), а внутренний - по столбцам (второй множитель).
Выведите графическое изображения делимости чисел от 1 до \(n\) (значение \(n\) вводится с клавиатуры) - в каждой строке напечатайте очередное число и столько символов * , сколько делителей у этого числа.
Например, если \(n = 4\) , на экране должно быть напечатано:
Выведите на экран (в строку) \(n\) первых простых чисел.
Внешний цикл должен отвечать за проверку, сколько чисел найдено, и генерацию следующего числа для проверки. Внутренний цикл проверяет, является ли простым текущее число.
В качестве алгоритма проверки «на простоту» используйте обычный перебор (простое число не делится ни на что кроме себя и единицы).
Составьте программу для нахождения всех натуральных решений уравнения \(x^2 + y^2 + z^2 = k^2\) , где \(x, y, z \in [1, 30]\) , а \(k\) вводится с клавиатуры.
4.2.6. Коллекции¶
Дан список из \(n\) вещественных чисел, введенных с клавиатуры (среди чисел есть по крайней мере одно положительное и отрицательное число).
Сформируйте из него 2 списка:
положительных чисел, используя списковые включения;
отрицательных чисел, не используя списковые включения.
Выведите на экран:
среднее арифметическое первого списка и среднее геометрическое второго списка.
При выводе вещественных результатов оставьте два знака после запятой.
Дан список целых чисел, введенных с клавиатуры (длина неизвестна). Ответьте на вопросы:
являются ли все элементы положительными числами?
есть ли хотя бы один нулевой элемент в списке?
являются ли все элементы четными числами?
есть ли хотя бы один нечетный элемент в списке?
Каждый из пунктов выполните дважды: используя стандартный проход в цикле (например, через алгоритм с флажком), и используя функции any() и/или all() .
Для ввода списка произвольной длины в одну строку воспользуйтесь методом str.split() для строки ввода (результата input() ), после чего сформируйте список целых чисел, используя списковые включения.
Дано предложение. Выведите его на экран, удалив из него все слова, содержащие произвольную букву (вводится с клавиатуры).
Строковые методы str.split() и str.join() могут оказаться полезными.
В зрительном зале кинотеатра \(n\) рядов, количество мест в которых может меняться. Разработчик смоделировал занятость мест как двумерный массив (список из списков), где каждый вложенный список содержит информацию о проданных местах в соответствующем ряду (1 - занято, 0 - свободно):
Напишите программу, которая позволит пользователю увидеть количество свободных мест, а также, введя номер ряда и места, получить информацию - свободно оно или нет. Данные о занятости мест вводятся с клавиатуры (набор из 0 и 1 для каждого ряда).
Заполнение вложенных списков (каждого ряда) организуйте аналогично задаче № 4.2.30 .
Вводится список из \(n\) сотрудников в формате:
все значения разделены пробелом и сами не содержат пробелов;
Стаж : количество полных лет, отработанных в компании.
Сохраните введенные задания в виде списка списков:
определите самого «молодого» и самого «старого» сотрудника, используя функцию sorted() ;
сформируйте 2 отельных списка: мужчин и женщин и ответьте, в каком из списков больше имен, начинающихся на букву \(k\) (вводится с клавиатуры).
Вводится список из \(n\) годовых вкладов, предлагаемых банками, в формате:
все значения разделены пробелом и сами не содержат пробелов;
наименование банка уникально;
Сумма : сумма для открытия вклада в руб. (целое число, \(> 0\) );
Процент : годовой процент по вкладу (вещественное число, \((0, 100]\) ).
Сохраните введенные данные в виде списка словарей:
Далее определите (гарантируется, что искомый банк - один):
самый доступный банк (с наименьшей первоначальной суммой);
самый выгодный банк, принимая, что за год прибыль = сумма * процент / 100 .
1. Ввести пять чисел с клавиатуры и найти произведение чисел меньших 10.
-
p - произведение чисел;
i - счетчик чисел>
-
begin
write('ch='); readln(ch);
if ch<10 then
-
begin
p:=p*ch;
end;
2. Определить максимальное число, введенное с клавиатуры.
Ответ может быть таким:
15
123
-5
максимальное число = 123
-
a: integer;
m: integer;
-
clrscr;
m:=0;
repeat
-
readln(a);
if a>m then m:=a
3. Найти максимальное из натуральных чисел, не превышающих 5000, которое нацело делится на 39.
Ответ: max число=4992
-
p - логическая переменная, определяющая условие целочисленного деления>
-
p:=ch mod 39 =0 ;
dec(ch) until p=true ;
4. Найти четырехзначные числа, делящиеся на 777 и на свою последнюю цифру.
Ответ: 2331 3885 4662 6216 6993 8547 9324
-
clrscr;
for ch:=1000 to 9999 do
-
begin
c:= ch mod 10;
if (ch mod 777=0) and (c< >0) and (ch mod c=0) then writeln(ch);
5. Найти пары натуральных двузначных чисел а и b, произведение которых в 10 раз больше их суммы.
Ответ:
a=12 b=60
a=14 b=35
a=15 b=30
a=20 b=20
a=30 b=15
a=35 b=14
a=60 b=12
-
for b:=10 to 99 do
-
begin
s:= a + b; p:= a*b;
6. Дан ряд чисел в котором каждое следующее число больше предыдущего на 1. Количество чисел в ряду больше 2
Первое число ряда равно 5. Найти последнее число ряда.
Должно выполняться условие: среднее арифметическое квадратов всех целых чисел - целое число.
s=255 n=5 f=51 x=9
Среднее арифметическое квадратов всех целых чисел ряда = 51
7. Даны целые числа от 1 до n.
Посчитать среднее арифметическое этих чисел,
если оно превышает 5, то на экран вывести число на 100 меньше среднего арифметического.
В противном случае на экран вывести сумму этих чисел.
Ответ может быть таким:
введите количество чисел ряда 9
сумма чисел равна 45
введите количество чисел ряда 10
величина на 100 меньше среднего арифметического -94.5
Читайте также: