Индивидуальные задания по теме: «Работа с массивами» Химия. Заданы N (N<30) веществ и таблица их взаимодействий a. При этом a[i,j]=0, если i-е вещество не взаимодействует с j-м веществом, и a[i,j]=k (1 ≤ i,j,k ≤ N), если при их взаимодействии получается k-е вещество, В пробирку одно за другим засыпаются вещества, Оказавшись рядом, они могут вступить в реакцию, Вновь образованное вещество, возможно, реагирует с нижележащим и т.д. Известно, что реакция взаимодействия происходит мгновенно и только между двумя соседними слоями. Написать программу, определяющую по заданной последовательности засыпаемых в пробирку веществ, какие вещества останутся в пробирке. Известно, что входные данные находятся в текстовом файле input.txt в следующем формате: первая строка – количество веществ N, следующие N строк таблица взаимодействий веществ, в (N+1)-й строке количество засыпаемых в пробирку веществ, а в (N+2) строке номера веществ в порядке их поступления в пробирку. Пример правильной работы программы: Содержимое файла input.txt 5 0 5 0 0 0 5 0 1 3 0 0 1 0 0 4 0 3 0 0 2 0 0 4 2 0 8 3 4 1 3 1 5 4 5 Результат: В пробирке останутся вещества с номерами: 1 Считаем рейтинг. Для студентов некоторого факультета по некоторому предмету введена рейтинговая система оценки. В текстовом файле хранится информация о текущей успеваемости студентов. В текущую успеваемость входят N практических работ и М теоретических (например, тестов). Первый столбец хранит индивидуальные номера студентов (например, номера зачетных книжек). 2-й, 3-й, … (N+1)-й хранят баллы за практические задания, (N+2)-й, (N+3)-й, … , (N+M+1)-й хранят баллы за теоретические задания. В первой строке входного файла хранятся максимальные баллы, присвоенные студенту с номером 999999 («идеальный студент»). Необходимо посчитать общую сумму баллов и процент от максимальной суммы для каждого студента, а так же место данного студента в рейтинге. Первое место в рейтинге присуждается студенту, набравшему максимальную сумму баллов, не считая при этом «идеального студента», второе место – тому, у кого сумма вторая по величине и т.д. Вывести в результирующий файл всю ту информацию, которая была во входном файле, добавив первый столбец – номер места в рейтинге и два последних столбца – общая сумма баллов и процент от максимально возможной суммы баллов. При выводе в результирующий файл информацию об «идеальном студенте» необходимо расположить в первой строке, а далее располагать строки с информацией о реальных студентах в порядке возрастания их места в рейтинге. Обращение. Обращением натурального числа n назовем такое натуральное число nобр, что запись числа nобр в двоичной системе счисления получается переворотом двоичной записи числа n. Например, для n=2210=101102 число nобр равно 13(10) = 11012. Даны два натуральных числа a и b (a ≤ b ≤ 109). Найдите наименьшее и наибольшее из обращений натуральных чисел отрезка [a;b]. Удаление. Дана последовательности целых чисел a1,a2,…,an, (n ≤ 20). Найдите минимальное количество чисел, после удаления которых из последовательности оставшиеся числа образую возрастающую последовательность. Факториальная система счисления. Представлением натурального числа N в факториальной системе счисления называется набор целых значений (dn, dn-1,…,d2,d1) для которого N = dnn! + dn-1(n–1)!+…+d22!+d11!, где di ≤ i, i=1,2,…,n. Дано натуральное число N. Найдите его представление в факториальной системе счисления. Барабан. Даны n чисел a1,a2,…,an, записанные по окружности. Вектором xk (1 ≤ k ≤ n) будем называть последовательность ak, ak+1, …, an, a1, … , ak-1. Будем считать, что вектор xk меньше вектора xm, если в первой неравной паре соответствующих элементов этих векторов выполняется условие ak+i < am+i (i=0,1,…). Среди векторов x1,x2,…,xn найдите минимальный. «Парикмахерская» Вдоль кольцевой дороги расположено M (M 30) городов, в каждом из которых открылась кооперативная парикмахерская. Известна стоимость СТРИЖКА[K] стрижки в городе K и стоимость ПРОЕЗД[K] проезда по отрезку дороги, соединяющей K-й и (K+1)-й города (ПРОЕЗД[M] – стоимость проезда между первым и M-м городом). Стоимость и проезд выражаются неотрицательными вещественными числами. Для жителей каждого города определить КУДА[K] – город, куда им следует съездить, чтобы подстричься самым дешевым образом (в своем собственном городе из соображений секретности стричься нельзя), и КАК[K] – «по часовой стрелке» или «против часовой стрелки» (города пронумерованы по часовой стрелке). (10 баллов) Технические требования: ● Данные вводятся из текстового файла INPUT.TXT. В первой строке - M, в следующих M строках названия городов и еще в M строках числа СТРИЖКА[K] и ПРОЕЗД[K] через пробел ● Выходные данные вывести в файл OUTPUT.TXT. В отдельной строке информация для каждого города КУДА[K] (название города) и КАК[K] (строка символов: “по часовой стрелке” или “против часовой стрелки”) через пробел (всего в выходном файле должно быть M строк – 1 строка для 1-го города, 2 строка для 2-го города и т.д.) Пример работы правильной программы: INPUT.TXТ 4 Перов Славный Звездный Братково 1 1.5 4 0 2 2 1.5 3 OUTPUT.TXT Звездный по часовой стрелки Звездный по часовой стрелке Перов против часовой стрелки Перов по часовой стрелке Счастливый билет. Даны номер автобусного билета – шестизначное натуральное число и целое неотрицательное число N. Между некоторыми парами соседних цифр разрешается ставить знаки арифметических операций (+, -, *) так, чтобы результат полученного арифметического выражения стал равен N. Требуется: 1) определить количество различных решений для заданного номера билета и N; 2) вывести все решения на экран. Замечания ● Разрешается предполагать, что число различных решений не превосходит число строк на экране ● Разрешается пренебречь грамматической согласованностью ответа. ● Значение выражения вычисляется с учетом приоритета заданных арифметических операций. Техническое требование: Программа должна проверять корректность ввода шестизначного числа Пример правильной работы программы: Введите шестизначное число 128500 Введите N 8512 12+8500=8512 Найдено 1 решений. Введите шестизначное число 258179 Введите N 100 2*58-1*7-9=100 2*58*1-7-9=100 Найдено 2 решений. Введите шестизначное число 663570 Введите N 100 Решение не существует. Введите шестизначное число 1998 Некорректный ввод Введите шестизначное число CHISLO Некорректный ввод Счастье в одной цифре. Число называется счастливым, если сумма правой половины его цифр равна сумме левой половины. Если число состоит из нечетного числа цифр, нужно добавить слева один ноль. Требуется, в заданном числе, состоящем не более чем из 20 цифр, заменить одну цифру так, чтобы получившееся число оказалось счастливым. Если вариантов несколько, то выдать тот, где число получается максимальным. Пример. ● Число: 9112004 Результат: 9117004 Частотный анализ текста. Произвольный русский текст содержит не более 200 символов. Написать: какие буквы и сколько раз каждая встречаются в этом тексте. Ответ должен приводится в грамматически правильной форме, например, а - 25 раз, к - 3 раза и т.д. Мама дала сыну S рублей и попросила купить к чаю один батон хлеба, пачку масла и порцию сыра. В магазине оказалось M сортов хлеба, N сортов масла и R сортов сыра. Цены на различные продукты различные. Хватит ли сыну денег на покупки, если он решил купить порцию мороженного, стоимость которого не более A рублей ? Если денег достаточно, то необходимо указать все варианты покупок. Вывод оформить в виде таблицы: +-----------------------+------------+------------+ ! Стоимость продуктов ! Стоимость ! Осталось на! +-------+-------+-------! покупки ! мороженое ! ! хлеб ! масло ! сыр ! ! ! +-------+-------+-------+------------+------------+ Пример правильной работы программы: Введите количество сортов хлеба (М) 4 Введите стоимость 1-го сорта хлеба (руб.) 30 Введите стоимость 2-го сорта хлеба (руб.) 10 Введите стоимость 3-го сорта хлеба (руб.) 40 Введите стоимость 4-го сорта хлеба (руб.) 20 Введите количество сортов масла (N) 3 Введите стоимость 1-го сорта масла (руб.) 30 Введите стоимость 2-го сорта масла (руб.) 20 Введите стоимость 3-го сорта масла (руб.) 40 Введите количество сортов сыра (R) 2 Введите стоимость 1-го сорта сыра (руб.) 80 Введите стоимость 2-го сорта сыра (руб.) 90 Введите максимальную стоимость порции мороженного (А руб.) 20 Введите, сколько денег мама дала сыну (S руб.) 140 Сын может выбрать следующие варианты покупок: +-----------------------+------------+------------+ ! Стоимость продуктов ! Стоимость ! Осталось на! +-------+-------+-------! покупки ! мороженое ! ! хлеб ! масло ! сыр ! ! ! +-------+-------+-------+------------+------------+ ! 10 ! 20 ! 80 ! 110 ! 30 ! !-------+-------+-------+------------+------------! ! 10 ! 20 ! 90 ! 120 ! 20 ! !-------+-------+-------+------------+------------! ! 10 ! 30 ! 80 ! 120 ! 20 ! !-------+-------+-------+------------+------------! ! 20 ! 20 ! 80 ! 120 ! 20 ! +-------+-------+-------+------------+------------+ РАСШИФРОВКА. Текст, записанный на русском языке (32 заглавных буквы и 33-й символ пробел) был зашифрован с использованием циклического сдвига букв алфавита вправо пробел Я А Ю Б Э В ............ На сколько символов производился сдвиг неизвестно. Расшифровать текст, при условии, что в нем есть слово ВРЕМЯ. «Снежинка Коха». Существует фрактал Коха. Фрактал 0-го порядка – правильный треугольник; Фрактал следующего порядка, получается из предыдущего, путем деления каждой стороны на 3 равных части и замены середин на выпуклый правильный треугольник. Пример построения этого фрактала представлен на рисунках: Снежинка Коха Снежинка Коха Снежинка Коха Снежинка Коха 3-го порядка 2-го порядка 1-го порядка 0-го порядка Требуется написать программу, определяющую в фрактале n-го порядка: количество сторон, площадь и периметр. Считать, что во фрактале 0-го порядка длина стороны равна 1. Формат входных данных: Одна строка, содержащая натуральное число N<30 — порядок фрактала. Формат выходных данных: Три строки, в первой – количество сторон, во второй площадь, в третьей – периметр. Площадь и периметр выводить с точностью 10 знаков после запятой Пример входных данных: 1 Пример выходных данных: 12 0.5773502692 4.0000000000 Простые числа. Многие свойства простых чисел поражали древних мыслителей и удивляют современных математиков до сих пор. При изучении их свойств сегодня применяются сложнейшие математические методы. Мы предлагаем задачу, которая раскрывает еще не исследованные свойства простых чисел. Определите, какая из цифр в десятичной записи всех простых чисел из заданного диапазона встречается чаще всего. Если таких цифр несколько, найдите наименьшую из них. Ваша программа должна считать исходные данные из файла INPUT.TXT. В первой строке этого файла находится число А, во второй – число В. Числа А и В – целые, (1<A<B<10000). Ваша программа должна решить задачу для интервала A<=P<=B. Известно, что в этом интервале имеется хотя бы одно простое число. Ваша программа должна записать найденную цифру в файл OUTPUT.TXT. Примеры входных и выходных данных: INPUT.TXT 10 20 OUTPUT.TXT 1 Поиск основания системы счисления. Одно и то же число различается записями в разных системах счисления. Например, в системе счисления с основанием 3 число 12 запишется как «110», а в системе счисления с основанием 8 как «14». Требуется написать программу, которая для любых двух записей чисел X и Y определит основания систем счисления b1 для X и b2 для Y, в которых заданные записи представляют одно значение (число) и сумма b1+b2 минимальна. Например, пусть на входе задано 12 и 5. Тогда программа должна напечатать 12(с/с3)=5(с/с6), так как 12(с/с3)=1*3+2*1=5 и 5(с/с6)=5. Формат входного файла: В каждой строке входного файла задается пара чисел X и Y, разделенных одним пробелом. X и Y могут быть записаны цифрами любой системы счисления с основанием от 2 до 36. Цифры от 0 до 9 представляются арабскими цифрами, а цифры от 10 до 35 – прописными латинскими буквами от A до Z. Формат выходного файла: Для каждой строки входного файла нужно напечатать равенство: X(c/c<число>)= Y(c/c<число>) (здесь символ «с» является строчной буквой латинского алфавита) или фразу: «Х не эквивалентно Y в любой системе счисления 2..36» (здесь вместо X и Y подставляются введенные значения). Пример входных данных: 12 5 10 А 12 34 123 456 1 2 10 2 Пример выходных данных: 12(с/с3)=5(с/с6) 10(с/с10)=А(с/с11) 12(с/с17)=34(с/с5) 123 не эквивалентно 456 в любой системе счисления 2..36 1 не эквивалентно 2 в любой системе счисления 2..36 10(с/с2)=2(с/с3) «Словарный запас» В некотором царстве алфавит состоит из К букв, а слова могут состоять не более чем из N букв (1<=N,K<=40). При этом самые короткие слова состоят из одной буквы. Требуется написать программу для определения словарного запаса этого языка. Словарный запас языка — это количество всех возможных слов, которые могут быть записаны буквами этого языка. Формат входных данных: В первой строке входного файла через пробел записаны значения K и N Формат выходных данных: В первой строке выходного файла, начиная с первой позиции, находится одно число – величина словарного запаса. Пример 1 файла входных данных: 2 3 Пример 1 файла выходных данных: 14 Пример 2 файла входных данных: 33 1 Пример 2 файла выходных данных: 33 «Двуручная считалочка» К (1<K<=80) игроков сидят за круглым столом, положив руки на стол (всего таким образом на столе в начале игры лежит 2K рук). Ведущий начинает счет с рук первого игрока, затем считает руки второго и т.д. Дойдя в счете до N (1<N<=80), ведущий останавливается, а рука, на которой закончился счёт, убирается со стола. Далее процесс повторяется (счет начинается со следующей после убранной руки). Если игрок вынужден убрать обе руки, он встаёт из-за стола, выбывая из игры. Требуется написать программу, определяющую последовательность выбывания игроков. Формат входных данных: В первой строке входного файла через пробел записаны два натуральных числа K и N. Формат выходных данных: В первой строке выходного файла должна находиться перестановка K натуральных чисел, разделённых одним пробелом, определяющая порядок выбывания игроков. (Номер игрока, который остался за столом, указывается последним) Пример файла входных данных: 4 3 Пример файла выходных данных: 4 3 1 2 4 Сумма геометрической прогрессии. Написать программу, подсчитывающую, сколько раз каждая цифра появляется в точном значении суммы первых N членов геометрической прогрессии AK = Q . AK-1, A0 = M по заданным натуральному N: целым Q и M. Должна быть предусмотрена корректность ввода. (10 баллов) Примечания : N ≤ 40, |Q| ≤ 40, |M| ≤ 40. Приглашение для ввода - имя переменной и ?>. Предполагается, что в записи ненулевого результата первая цифра отлична от нуля. Пример работы правильной программы: M?>39 Q?>39 N?>39 0 встречается 5 раз 1 встречается 10 раз 2 встречается 8 раз 3 встречается 2 раз 4 встречается 5 раз 5 встречается 4 раз 6 встречается 4 раз 7 встречается 11 раз 8 встречается 8 раз 9 встречается 6 раз Криптограмма. Текст закодирован с помощью сетки размером NxN. Для того, чтобы раскодировать сообщение, нужно наложить сетку так, чтобы в отверстия можно было видеть символы криптограммы, на которую наложена сетка. Первый раз сетка накладывается так, чтобы сторона , отмеченная знаком “+”, была верхней, затем сетка поворачивается по часовой стрелке на 90 градусов, читается следующий набор символов, и т.д.. до полного оборота на 360 градусов. Разработать программу, которая вводит закодированный текст по строкам и расшифровывает его с помощью данной сетки. Входные данные: в файле INPUT.TXT в первой строке указан размер сетки (N), в следующих N строках – зашифрованный текст по N символов в строке, в следующих N строках – сетка закодированная символами ‘1’ и ‘0’ (1 – клетка вырезана, 0 – нет) Выходные данные: в файл OUTPUT.TXT вывести расшифрованное сообщение. Числа по диагоналям. Задана квадратная матрица NxN (1N10), заполненная случайными цифрами. Из матрицы читаются числа вдоль главной диагонали в направлении от левого верхнего угла и вдоль побочной диагонали в направлении от левого нижнего угла. Например, для матрицы 3х3 будут прочитаны числа: 3, 26, 59, 48, 7, 0, 42, 753, 86, 9. Требуется написать программу, которая проверяет, имеются ли среди прочитанных чисел хотя бы два одинаковых. Формат входного файла: В первой строке входного файла указывается натуральное число N (1N100) – размер матрицы. В N следующих строках располагаются случайные цифры по N в строке. Цифры в строке разделяются одним пробелом. Формат выходного файла: В единственной строке выходного файла выводится наименьшее повторяющееся число или «Нет» при отсутствии таковых. Пример 1 входных данных: 2 12 34 Пример 1 выходных данных: Нет Пример 2 входных данных: 2 32 32 Пример 2 выходных данных: 2 Умножение методом решетки. В IX веке нашей эры арабский математик Мухаммед ибн Мусса ал-Хорезми придумал способ умножения натуральных чисел, который называют методом решетки. Ниже приведены примеры умножения чисел этим методом Один из математиков того времени очень хорошо считал в уме и от его записей остались только «решетки» с промежуточными расчетами, на которых умножаемое, множитель и произведение записаны не были. Например: Требуется написать программу, определяющую по заданной «решетке» какие числа участвовали в произведении и каков был результат. Если решений несколько, выдать все. В случае, если входные данные не являются корректными и решение не может быть найдено, выдать соответствующее сообщение. Формат входных данных: Первая строка содержит два натуральных числа N и M, 0<N,M<100 (N – число строк, M –число столбцов), определяющих размер решетки, разделенных одним пробелом. Следующие N строк содержат по M целых чисел aij (aij>=0), разделенных одним пробелом. Одно число aij соответствует одной клетке «решетки» без разделения его на десятки и единицы. Формат выходных данных: Если существует единственное решение, в файле должна содержаться одна строка с 3-мя целыми числами, разделенными одним пробелом — первое число – умножаемое, второе число – множитель, .третье – произведение первых двух. В случае, если решений несколько, решения выводятся аналогичным образом по одному в строке, число строк выходного файла в этом случае должно быть равно числу найденных решений. Примеры входного и выходного файлов input.txt output.txt 2 2 12 37 444 3 6 7 14 Вычисление точного значения многочлена. Имеется многочлен: P(x) = anxn+an-1xn-1+...+a1x+a0. Требуется составить программу, вычисляющую точное значение P(x0), где ai (i=0,1,2,...,n) и x0 - неотрицательные целые числа, 0 x0 32767, n натуральное, n > 10. Формат входных данных: Входной файл содержит (n+3) строки. В первой строке записано число n, в следующих (n+1) строке находятся коэффициенты многочлена ai (по одному в строке) и перечисляются они от an к a0. В последней строке входного файла находится значение x0. Формат выходных данных: В выходной файл выводится одно число - значением многочлена в точке x0. Примеры входного и выходного файлов input.txt output.txt 3734737952909 11 12 11 10 9 9 1 2 3 4 5 6 7 11 «Прямоугольнички». На прямоугольном листке бумаги в клеточку размером M*N (1<=M,N<=10000) выделено K (1<=K<=100) клеток. Петя Васечкин закрасил все столбцы и все строки, которые содержат выделенные клетки. В результате на листке образовалось несколько незакрашенных прямоугольных областей. Требуется написать программу, определяющую количество таких областей. Формат входных данных: Первая строка содержит три числа — М, N и К. Далее следует K строк, каждая из которых содержит два натуральных числа — номера строк и номера столбцов выделенных клеток. Формат выходных данных: Одна строка, содержащая число — количество незакрашенных областей. Пример файла входных данных: 582 25 52 Пример файла выходных данных: 6