Некоторый алгоритм из одной цепочки десятичных цифр получает новую цепочку следующим образом: 1. первая цифра исходной цепочки не
5-9 класс
|
меняется; 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)+Цепь.ПолучитьЗначение(ц));
ТХТ=ТХТ+";"+След;
КонецЦикла;
Сообщить(ТХТ);
КонецПроцедуры
Другие вопросы из категории
лся в каталогФАРАОН. Каков полный путь к каталогу, в котором оказал-ся пользователь?
Читайте также
следующим образом. Сначала записывается исходная цепочка символов, после нее
записывается исходная цепочка символов в обратном порядке, затем записывается
буква, следующая в русском алфавите за той буквой, которая в исходной цепочке
стояла на первом месте. Получившаяся цепочка является результатом работы
алгоритма. Например, если исходная цепочка символов была ЛЕС, то результатом
работы алгоритма будет цепочка ЛЕССЕЛМ. Дана цепочка символов ГО. Какая
цепочка символов получится, если к данной цепочке применить алгоритм дважды (то
есть к данной цепочке применить алгоритм, а затем к результату его работы еще раз
применить алгоритм)?
цепочку следующим образом. Сначала вычисляется длина исходной цепочки символов;
если она нечётна, то дублируется средний символ цепочки символов, а если чётна,
то в конец цепочки добавляется буква В.
В полученной цепочке символов каждая буква заменяется буквой, следующей за ней
в русском алфавите (А
записывается исходная цепочка символов в обратном порядке, затем записывается буква, следующая в русском алфавите за той буквой, которая в исходной цепочке стояла на последнем месте. Получившаяся цепочка является результатом работы алгоритма. Например, если исходная цепочка символов была ДОМ, то результатом работы алгоритма будет цепочка
символов; если она четна, то в конец цепочки символов добавляется символ О, а если нечетна, то в начало цепочки добавляется символ А. В полученной цепочке символов каждая буква заменяется буквой, предшествующей ей в русском алфавите(Б- на А, В-на Б и тд, а А на Я) Затем цепочка переписывается с конца к началу. Получившаяся таким образом цепочка является результатом работы алгоритма.
Дана цепочка символов ВПУ. Какая цепочка символов получится, если к данной цепочке применить описанный алгоритм дважды(т.е. применить алгоритм к данной цепочке, а затем к результату вновь применить алгоритм)? если можно объясните, пожалуйста:)
числа дописывается столько нулей, сколько четных цифр в исходном числе. Получившееся число является результатом работы алгоритма. Например, исходное число было 325, то результатом работы алгоритма было число 3253250. Дано число 144. Сколько нулей будет содержаться в итоговом числе, если к исходному числу применить описанный алгоритм дважды(т.е. применить алгоритм к данному числу, а затем к данному результату вновь применить алгоритм. Необходимо написать подробное решение и объяснить задачу на пальцах.