Некоторый алгоритм из одной цепочки десятичных цифр получает новую цепочку следующим образом: 1. первая цифра исходной цепочки не меняется; 2. каждая следующая цифра (начиная со второй) заменяется суммой этой цифры и предыдущей цифры исходной цепочки. сумма вычисляется до тех пор, пока не будит получена десятичная цифра. например, сумма цифр 7 и 5 равна 12. это число, а не десятичная цифра, значит, необходимо суммирование продолжить: 1+2=3. это цифра, следовательно, суммирование закончено. например, если исходная цепочка 4 7 2 8 1, то результатом работы этого алгоритма будет цепочка 4 2 9 1 9. дана цепочка символов 1 7 5 2 6 .применить к этой цепочке описанный алгоритм дважды. какая цифра чаще всего встречается в получившейся цепочке?
Ответы на вопрос:
мне понравилась , как мне кажется, наиболее изящное решение через рекурсивную функцию
пусть а(размер) - массив, в котором хранится исходная цепочка. тогда основная процедура будет иметь вид
//*******************************************
процедура сформировать() тхт=""+а(1); для ц=2 по размер цикл след=следующий(а(ц-1)+а(ц)); тхт=тхт+"; "+след; конеццикла; сообщить(тхт); конецпроцедуры
вот и всё! осталось написать процедуру-функцию следующий
у меня она рекурсивная
//**********************************************
функция следующий(тч)если тч< 10 тогда возврат(тч); иначе д=цел(тч/10); е=тч-д*10; возврат(следующий(д+е)); конецесли; конецфункции
вот теперь совсем всё.
при подстановке цепочки 1; 7; 5; 2; 6 программа выдала 1; 8; 3; 7; 8 то есть чаще встречается 8.
замечание1 можешь написать и не рекурсивную, это просто, но рекурсия красивей(как мне кажется), да и просто делать дальнейшие модификации (например для исходных многозначных чисел).
замечание2 я, по сути дела, "вручную" находил десятки и единицы, если в языке, которым ты владеешь, есть функции типа, "остаток от деления", можешь их использовать
замечание3 программа абсолютно рабочая, чуть-чуть изменена для детского восприятия, написана на 1с77. перевести на свой язык, думаю, сумеешь.
успехов!
кстати, вот что у меня получилось(не адаптированный текст), если исходная цепочка может содержать любые неотрицательные целые числа, а на выходе - сумма цифр первого, ну и сумма цифр предыдущего с текущим. как видишь, практически тот же текст, но более общий.
функция следующий(тч) если тч< 10 тогда возврат(тч); иначе стч=строка(тч); чч=0; для цц=1 по стрдлина(стч) цикл чч=чч+число(сред(стч,цц,1)); конеццикла; возврат(следующий(чч)); конецесли; конецфункции
//*******************************************процедура сформировать() тхт=""+следующий(цепь.получитьзначение(1)); для ц=2 по цепь.размерсписка() цикл след=следующий(цепь.получитьзначение(ц-1)+цепь.получитьзначение(ц)); тхт=тхт+"; "+след; конеццикла; сообщить(тхт); конецпроцедуры
Популярно: Информатика
-
ATimofeeva19.04.2023 04:46
-
katyazabriyan27.02.2021 01:55
-
МагистрЕдаа12.01.2020 09:36
-
настя667005.06.2020 05:41
-
Aleksa543204.01.2023 19:01
-
Fae4222.11.2021 12:03
-
ress33420.02.2020 11:40
-
kirillshe201216.06.2022 12:15
-
Baka111119.08.2022 13:25
-
linassglazunov21.01.2021 03:41