Индивидуальные задания по теме Массивыx

advertisement
Индивидуальные задания по теме: «Работа с массивами»
Химия. Заданы 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 (1N10), заполненная
случайными цифрами. Из матрицы читаются числа вдоль главной диагонали в
направлении от левого верхнего угла и вдоль побочной диагонали в направлении от
левого нижнего угла. Например, для матрицы 3х3
будут прочитаны числа: 3,
26, 59, 48, 7, 0, 42, 753, 86, 9.
Требуется написать программу, которая проверяет, имеются ли среди прочитанных
чисел хотя бы два одинаковых.
Формат входного файла:
В первой строке входного файла указывается натуральное число N (1N100) –
размер матрицы.
В 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
Download