544.Даны натуральное число n, действительные числа a1, ..., an. Если в последовательности a1, ..., an есть хотя бы один член, меньший, чем – 3, то все неотрицательные члены заменить их квадратами, оставив остальные члены без изменения; в противном случае домножить все члены на 0.1.
545.«Считалка». Даны натуральные n, m. Предполагается, что n
человек встают в круг и получают номера, считая против часовой
стрелки, 1, 2, ..., n. Затем, начиная с первого, также против часовой стрелки отсчитывается m-й человек (поскольку люди стоят по кругу, то за n–м человеком стоит первый). Этот человек выходит из круга, после чего, начиная со следующего, снова отсчитывается m-й человек и так до тех пор, пока из всего круга не остается один человек. Определить его номер.
Для решения этой задачи полезен список, соединенный в кольцо так, как показано на рис. 28.
Р и с . 2 8
546.Даны натуральные числа n, m, символы s1, ...., sn (m < n).
Получить последовательность символов: а) sm + 1, sm + 2, ..., sn, s1, ..., sm;
б) sm + 1, sm + 2, ..., sn, sm, ..., s1;
в) sn, sn – 1, ..., sm + 1, s1, ..., sm .
547.Даны натуральное число n, символы s1, ...., sn. Известно, что в последовательность s1, ...., sn входит по крайней мере один пробел. Пусть m таково, что sm – это первый по порядку пробел, входящий в s1, ...., sn (m заранее неизвестно). Выполнить преобразования а), б), в), сформулированные в предыдущей задаче.
548.Даны натуральное число n, символы s1, ...., sn. Получить те символы, принадлежащие последовательности s1, ...., sn, которые входят в эту последовательность по одному разу.
549.Даны натуральное число n, символы s1, ...., sn. Получить последовательность символов, содержащую только последние вхождения каждого символа с сохранением взаимного порядка этих вхождений.
550.Даны натуральные числа k, m, l, символы
s1, ...., sk, t1, ...., tm, u1, ...., ul. Получить по одному разу те символы, которые входят одновременно во все три последовательности.
551.Даны натуральное число n, символы s1, ...., sn. Будем рассматривать слова, образованные входящими в последовательность s1, ...., sn символами (см. задачу 269). Ниже описываются преобразования, каждое из которых следует произвести при выполнении указанного условия. Затем последовательность вне зависимости от того, подвергалась она или нет преобразованию, должна быть отредактирована следующим образом. Должны быть
удалены группы пробелов, которыми начинается и заканчивается последовательность, а каждая внутренняя группа пробелов должна быть заменена одним пробелом.
Преобразования:
а) если общее количество слов больше единицы и нечетно, то удалить первое слово;
б) если последнее слово начинается буквой а и общее число слов больше единицы, то переставить последнее слово в начало последовательности, отделив его пробелом от s1;
в) если первое и последние слова совпадают и общее число слов больше единицы, то удалить первое и последнее слова, а оставшиеся символы переставить в обратном порядке.
552.Даны символы s1, s2, .... Известно, что символ si отличен от точки и что среди s2, s3, .... имеется хотя бы одна точка. Пусть s1, ...., sn
– символы, предшествующие первой точке (n заранее неизвестно). Получить:
а) последовательность sn, sn-1, ..., s1;
б) последовательность s1, s3, ..., sn, если n – нечетное, и последовательность s2, s4, ..., sn, если n – четное.
553.Если требуется хранение последовательности, число членов которой ограничено сверху некоторым известным числом N, то можно использовать для хранения последовательности массив с N элементами, занимая, таким образом, память вычислительной машины с некоторым запасом. Это позволяет обойтись без списков.
а) Вернуться к задаче 531, считая, что n £ 1000. б) Вернуться к задаче 532, считая, что n £ 1500.
в) Вернуться к задаче 550, считая, что k £ 1000, m £ 1000,
l £ 100.
г) Вернуться к задаче 550, считая, что k + m + l £ 2000.
Следует иметь в виду, что если используется несколько таких массивов, то суммарный излишек занятой памяти может оказаться слишком большим для того, чтобы можно было воспользоваться этим приемом.