Некоторый алгоритм из одной цепочки десятичных цифр получает новую цепочку следующим образом: 1. первая цифра исходной цепочки не меняется; 2. каждая следующая цифра (начиная со второй) заменяется суммой этой цифры и предыдущей...

Некоторый алгоритм из одной цепочки десятичных цифр получает новую цепочку следующим образом: 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)+Цепь.ПолучитьЗначение(ц));    ТХТ=ТХТ+";"+След; КонецЦикла; Сообщить(ТХТ); КонецПроцедуры    
Не нашли ответ?
Ответить на вопрос
Похожие вопросы