Студопедия Главная Случайная страница Обратная связь

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

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




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


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


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


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

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

Случайной величины Плотностью распределения вероятностей непрерывной случайной величины Х называют функцию f(x) – первую производную от функции распределения F(x): Понятие плотность распределения вероятностей случайной величины Х для дискретной величины неприменима...

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

Философские школы эпохи эллинизма (неоплатонизм, эпикуреизм, стоицизм, скептицизм). Эпоха эллинизма со времени походов Александра Македонского, в результате которых была образована гигантская империя от Индии на востоке до Греции и Македонии на западе...

Демографияда "Демографиялық жарылыс" дегеніміз не? Демография (грекше демос — халық) — халықтың құрылымын...

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

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