Студопедия — Развернуть натуральное число задом наперед. Например, 1999 должно превратиться в 9991.
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Развернуть натуральное число задом наперед. Например, 1999 должно превратиться в 9991.






 

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

 

Для разнообразия напишем функцию на КуМире.

 

алг цел развернуть число (цел число)

 

дано число > 0

 

надо | знач= число "задом наперед" нач цел копия

 

|КуМир не разрешает изменять

 

| значения аргументов

 

знач: = 0

 

копия:= число

 

нц пока копия > 0

 

|знач:= 10*знач + mod(копия, 10)

 

копия: = div(копия,10)

 

кц

 

кон

 

Контрольный вопрос. Какой результат выдаст эта функция, если вызвать ее с аргументом, равным 2000? Как вы считаете, можно ли считать, что в этом случае разворот выполняется корректно?

 

Задача 6

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

 

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

 

Очевидных этапов решения три:

 

— подсчитать, сколько раз встречается в исходном числе каждая цифра;

 

— определить самую популярную цифру;

 

— преобразовать число, вычеркивая нужную цифру.

 

Для выполнения первого этапа (подсчет количества каждой цифры) можно завести массив из 10 элементов, которые будут соответствовать цифрам от 0 до 9, и разобрать число по цифрам, каждый раз увеличивая соответствующий очередной цифре элемент массива.

 

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

 

Самый трудный — третий этап. Нужно разобрать число и собрать его снова, удалив при этом "лишние детали". Причем собрать нужно не в обратном, а в исходном порядке. Это значит, что нужно либо научиться собирать число с конца, либо где-то хранить полученные при разборке цифры до того момента, пока они понадобятся.

 

Попробуем реализовать оба варианта. Для сборки числа с конца можно применить такой прием. Будем учитывать позиционный множитель, который равен 1 для последней цифры и в 10 раз больше для каждой следующей. Умножая цифры на этот множитель, мы получим нужное число.

 

Можно реализовать и временное хранение. Вполне подходящим местом для него может стать рекурсивный стек.

 

Теперь попробуем воплотить все сказанное в программе.

 

алг удалить популярную цифру (арг цел X, рез цел Y)

 

дано Х>0

 

надо | Y получен из Х вычеркиванием самой

| популярной цифры

 

нач цел сколько[0:9]

 

| сколько раз встречается каждая

 

| цифра

 

цел цифра | самая частая цифра в Х

анализ количества цифр (X, сколько)

цифра:= imax (0, 9, сколько)

 

Y:= удалить цифру (X, цифра)

 

кон

 

 

алг анализ количества цифр (арг цел число,

рез цел таб ц[0:9])

 

дано число > 0

 

надо | элементы ц[i] показывают, сколько

 

| раз встречается цифра i в записи

 

| числа

 

нач цел i | счетчик для перебора

 

цел копия, цифра

 

нц для i<от 0 до 9

 

| сколько[i]:= 0

 

кц

 

копия:= число

 

нц пока копия > О

 

цифра:= mod(копия,10)

 

ц[цифра]:== ц[цифра]+1

 

копия:== div(копия,10)

 

кц

 

кон

 

алг цел imax (арг цел низ, верх,

 

цел таб а[низ:верх])

 

дано

 

надо | знач = индекс наибольшего элемента

 

| в таблице а. Если наибольших

 

| элементов несколько, берется последний

 

 

нач цел i

 

знач:=низ

 

нц для i от низ+1 до верх

 

если a[i] >= а[знач]

 

| то знач:= i все

 

кц

 

кон

 

алг цел удалить цифру {арг цел число, цифра)

 

| вариант 1

 

дано число > О

 

надо | знач = число, из которого вычеркнуты

| заданные цифры

 

нач цел копия, множитель, ц

копия:= число

знач:= 0

множитель:= 1

нц пока копия > 0

ц: = mod(копия,10)

если ц <> цифра

то знач:= знач + множитель*ц

множитель:= множитель*10

все

копия:== div(копия,10)

кц

кон

 

алг цел удалить цифру (арг цел число, цифра)

 

| вариант 2

 

дано число >= 0

 

надо | знач = число, из которого вычеркнуты

 

| заданные цифры

 

нач цел ц

 

если число = 0 то знач:= 0 иначе

 

ц:== mod(число,10)

 

если ц = цифра

то знач:= удалить цифру

 

(div(число,10),цифра)

 

иначе знач:== удалить цифру

 

(div(число,10), цифра)*10 + ц

 

все

все

кон

 

Контрольные вопросы

 

Почему в функции imax в сравнении использован знак >=? Что будет, если заменить ею на >?

 

За счет чего в рекурсивном варианте функции "удалить цифру" удалось о6ойтись без множителя и копии? Что их заменяет?

 

Задачи для самостоятельного решения

 

1. В заданном натуральном числе поменять местами первую и последнюю цифры.

 

2. Вывести целое число в столбик, по одной цифре в каждой строке.

 

3. Переставить цифры заданного числа так, чтобы получилось:

 

а) наибольшее возможное число;

 

б) наименьшее возможное число.

 







Дата добавления: 2015-08-30; просмотров: 610. Нарушение авторских прав; Мы поможем в написании вашей работы!



Практические расчеты на срез и смятие При изучении темы обратите внимание на основные расчетные предпосылки и условности расчета...

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Вычисление основной дактилоскопической формулы Вычислением основной дактоформулы обычно занимается следователь. Для этого все десять пальцев разбиваются на пять пар...

Виды нарушений опорно-двигательного аппарата у детей В общеупотребительном значении нарушение опорно-двигательного аппарата (ОДА) идентифицируется с нарушениями двигательных функций и определенными органическими поражениями (дефектами)...

Особенности массовой коммуникации Развитие средств связи и информации привело к возникновению явления массовой коммуникации...

Тема: Изучение приспособленности организмов к среде обитания Цель:выяснить механизм образования приспособлений к среде обитания и их относительный характер, сделать вывод о том, что приспособленность – результат действия естественного отбора...

Дезинфекция предметов ухода, инструментов однократного и многократного использования   Дезинфекция изделий медицинского назначения проводится с целью уничтожения патогенных и условно-патогенных микроорганизмов - вирусов (в т...

Машины и механизмы для нарезки овощей В зависимости от назначения овощерезательные машины подразделяются на две группы: машины для нарезки сырых и вареных овощей...

Классификация и основные элементы конструкций теплового оборудования Многообразие способов тепловой обработки продуктов предопределяет широкую номенклатуру тепловых аппаратов...

Studopedia.info - Студопедия - 2014-2024 год . (0.01 сек.) русская версия | украинская версия