Студопедия — Развернуть натуральное число задом наперед. Например, 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; просмотров: 614. Нарушение авторских прав; Мы поможем в написании вашей работы!



Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

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

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Типы конфликтных личностей (Дж. Скотт) Дж. Г. Скотт опирается на типологию Р. М. Брансом, но дополняет её. Они убеждены в своей абсолютной правоте и хотят, чтобы...

Гносеологический оптимизм, скептицизм, агностицизм.разновидности агностицизма Позицию Агностицизм защищает и критический реализм. Один из главных представителей этого направления...

Функциональные обязанности медсестры отделения реанимации · Медсестра отделения реанимации обязана осуществлять лечебно-профилактический и гигиенический уход за пациентами...

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

Сущность, виды и функции маркетинга персонала Перснал-маркетинг является новым понятием. В мировой практике маркетинга и управления персоналом он выделился в отдельное направление лишь в начале 90-х гг.XX века...

Разработка товарной и ценовой стратегии фирмы на российском рынке хлебопродуктов В начале 1994 г. английская фирма МОНО совместно с бельгийской ПЮРАТОС приняла решение о начале совместного проекта на российском рынке. Эти фирмы ведут деятельность в сопредельных сферах производства хлебопродуктов. МОНО – крупнейший в Великобритании...

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