Казанский (приволжский) федеральный университет
Институт вычислительной математики и информационных технологий
Кафедра информационных систем и технологий
Отчет семестровых работ
по дисциплине: «Теория информационных процессов и систем»
Выполнила студент
Группы 912ИСТ
Проверил преподаватель
Казань 2014г.
Задачи ACMP.RU
Задача №1 «A+B»
Постановка задачи
Требуется сложить два целых числа А и В.
Входные данные: в единственной строке входного файла INPUT.TXT записано два натуральных числа через пробел, не превышающих 109.
Выходные данные: в единственную строку выходного файла OUTPUT.TXT нужно вывести одно целое число — сумму чисел А и В.
Основные идеи решения
Программа данного алгоритма
var a, b : longint;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(a, b);
write(a + b);
end.
Задача №2 «Сумма»
Постановка задачи
Требуется посчитать сумму целых чисел от 1 до N.
Входные данные: В единственной строке входного файла INPUT.TXT записано единственное целое число N, не превышающее по абсолютной величине 104.
Выходные данные: В единственную строку выходного файла OUTPUT.TXT нужно вывести одно целое число — сумму чисел от 1 до N.
Основные идеи решения
1.Считываем N.
2. Если N больше 0, то складываем все числа от 1 до N
3.Иначе складываем все числа от N до 1
4. Выводим сумму.
Программа данного алгоритма
var N,s,i:integer;
begin
assign (input,input.txt);
assign (output,output.txt);
read (N);
s:=0;
if N>0 then for i:= 1 to N do s:=i+s
else for i:= N to 1 do s:=i+s;
write (s);
end.
Задача №3 «Пятью пять - двадцать пять!»
Постановка задачи
Вася и Петя учатся в школе в одном классе. Недавно Петя поведал Васе о хитром способе возведения в квадрат натуральных чисел, оканчивающихся на цифру 5. Теперь Вася может с легкостью возводить в квадрат двузначные (и даже некоторые трехзначные) числа, оканчивающиеся на 5. Способ заключается в следующем: для возведения в квадрат числа, оканчивающегося на 5 достаточно умножить число, полученное из исходного вычеркиванием последней пятерки на следующее по порядку число, затем остается лишь приписать «25» к получившемуся результату справа. Например, для того, чтобы возвести число 125 в квадрат достаточно 12 умножить на 13 и приписать 25, т.е. приписывая к числу 12*13=156 число 25, получаем результат 15625, т.е. 1252=15625. Напишите программу, возводящую число, оканчивающееся на 5, в квадрат для того, чтобы Вася смог проверить свои навыки.
Входные данные: В единственной строке входного файла INPUT.TXT записано одно натуральное число А, оканчивающееся на цифру 5, не превышающее 4*105.
Выходные данные: В выходной файл OUTPUT.TXT выведите одно натуральное число - A2 без лидирующих нулей.
Основные идеи решения
Программа данного алгоритма
var a,b:longint;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(a);
if a=5 then write(25);
b:=a div 10;
if a>5 then write(b*(b+1),25);
end.
Задача №4 «Игра»
Постановка задачи
В свободное время одноклассники Вася и Петя любят играть в различные логические игры: морской бой, крестики-нолики, шахматы, шашки и многое другое. Ребята уже испробовали и поиграли во всевозможные классические игры подобного рода, включая компьютерные. Однажды им захотелось сыграть во что-нибудь новое, но ничего подходящего найти не удалось. Тогда Петя придумал следующую игру «Угадайка»: Играют двое участников. Первый загадывает любое трехзначное число, такое что первая и последняя цифры отличаются друг от друга более чем на единицу. Далее загадавший число игрок переворачивает загаданное число, меняя первую и последнюю цифры местами, таким образом получая еще одно число. Затем из максимального из полученных двух чисел вычитается минимальное. Задача второго игрока – угадать по первой цифре полученного в результате вычитания числа само это число. Например, если Вася загадал число 487, то перестановкой первой и последней цифры он получит число 784. После чего ему придется вычесть из 784 число 487, в результате чего получится число 297, которое и должен отгадать Петя по указанной первой цифре «2», взятой из этого числа. Петя успевает лучше Васи по математике, поэтому практически всегда выигрывает в играх такого типа. Но в данном случае Петя схитрил и специально придумал такую игру, в которой он не проиграет Васе в любом случае. Дело в том, что придуманная Петей игра имеет выигрышную стратегию, которая заключается в следующем: искомое число всегда является трехзначным и вторая его цифра всегда равна девяти, а для получения значения последней достаточно отнять от девяти первую, т.е. в рассмотренном выше случае последняя цифра равна 9-2=7. Помогите Пете еще упростить процесс отгадывания числа по заданной его первой цифре, написав соответствующую программу.
Входные данные: В единственной строке входного файла INPUT.TXT задана единственная цифра К, соответствующая первой цифре полученного Васей в результате вычитания наименьшего загаданного Васей значения из наибольшего.
Выходные данные: В единственной строке входного файла INPUT.TXT задана единственная цифра К, соответствующая первой цифре полученного Васей в результате вычитания наименьшего загаданного Васей значения из наибольшего.
Основные идеи решения
Программа данного алгоритма
var a : longint;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(a);
write(a,9,9-a);
end.
Задача №8 «Арифметика»
Постановка задачи
В прошлом году Вася пошел в школу и научился считать. В этом году он изучил таблицу умножения и теперь умеет перемножать любые числа от 1 до 10 без ошибок. Друг Петя рассказал ему про системы счисления, отличные от десятичной. В частности, про двоичную, восьмеричную и даже шестнадцатеричную. Теперь Вася без труда (но уже с помощью листка и ручки) может перемножать числа от 1 до 10 и в этих системах, используя перевод из нестандартной системы в десятичную и обратно из десятичной. Например, если Васе нужно перемножить числа 101 и 1001 в двоичной системе, то он сначала эти числа переводит в десятичное представление следующим образом:
(101)2=1*22+0*21+1*20=4+0+1=5
(1001)2=1*23+0*22+0*21+1*20=8+0+0+1=9
После чего перемножение чисел 5 и 9 Вася с легкостью производит в десятичной системе счисления в уме и получает число 45. Далее производится перевод из десятичной системы счисления в двоичную. Для этого Вася делит число 45 на 2 (порядок системы счисления), запоминая остатки от деления, до тех пор пока в результате не останется число 0:
Ответ составляется из полученных остатков от деления путем их записи в обратном порядке. Таким образом Вася получает результат: (101)2 * (1001)2 = (101101)2. Но теперь Вася изучает таблицу умножения чисел от 1 до 100 в десятичной системе счисления, а поскольку запомнить такую таблицу очень сложно, то Васе придется очень долго ее зубрить. Составьте для Васи программу, которая поможет ему проверять свои знания.
Входные данные: Во входном файле INPUT.TXT записаны три натуральных числа A, B и C через пробел. Числа A и B <= 102, а C <= 106.
Выходные данные: В выходной файл нужно вывести YES в том случае, если A*B=C и вывести NO в противном случае.
Основные идеи решения
Программа данного алгоритма
var a, b, c: longint;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(a,b,c);
if a*b=c then write(YES) else write(NO);
end.
Задача №9 «Домашнее задание»
Постановка задачи
Петя успевает по математике лучше всех в классе, поэтому учитель задал ему сложное домашнее задание, в котором нужно в заданном наборе целых чисел найти сумму всех положительных элементов, затем найти где в заданной последовательности находятся максимальный и минимальный элемент и вычислить произведение чисел, расположенных между ними. Так же известно, что минимальный и максимальный элемент встречаются в заданном множестве чисел только один раз. Поскольку задач такого рода учитель дал Пете около ста, то Петя как сильный программист смог написать программу, которая по заданному набору чисел самостоятельно находит решение. А Вам слабо?
Входные данные: В первой строке входного файла INPUT.TXT записано единственное число N – количество элементов массива. Вторая строка содержит N целых чисел, представляющих заданный массив. Все элементы массива разделены пробелом. Каждое из чисел во входном файле не превышает 102 по абсолютной величине.
Выходные данные: В единственную строку выходного файла OUTPUT.TXT нужно вывести два числа, разделенных пробелом: сумму положительных элементов и произведение чисел, расположенных между минимальным и максимальным элементами. Значения суммы и произведения не превышают по модулю 3*104.
Основные идеи решения
Считываем кол-во элементов.
Устанавливаем максимум и минимум (например найдем их среди первых 2 чисел)
Складываем все положительные числа массива и находим номер максимального (k) и минимального (f).
Находим сумму элементов между минимумом и максимумом;
Выводим сумму полож. элементов и элементов между минимумом и максимумом.
Программа данного алгоритма
var k,f,s,i,j,max,min,n:integer;
a: array [1..1000000] of integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(n);
s:=0;
j:=1;
for i:=1 to n do
read(a[i]);
if a[1]>a[2] then begin max:=a[1];min:=a[2]; end
else begin max:=a[2];min:=a[1]; end;
for i:=1 to n do
begin
if a[i]>0 then s:=s+a[i];
if a[i]>=max then begin max:=a[i];k:=i; end;
if a[i]<=min then begin min:=a[i];f:=i; end;
end;
if k>f then
for i:=f+1 to k-1 do
j:=j*a[i]
else for i:=k+1 to f-1 do
j:=j*a[i];
write(s, ,j);
end.
Задача №10 «Уравнение»
Постановка задачи
Вася в школе изучил квадратные уравнения и понял, как они легко решаются путем вычисления дискриминанта. Но Петя поведал ему о методе решения кубических уравнений вида A*X3 + B*X2 + C*X + D = 0. На факультативе по математике Васе задали решить около ста уравнений как раз такого вида. Но, к сожалению, Вася забыл формулы, о которых рассказывал ему Петя. Но Васе было известно, что все корни уравнений – целые числа и находятся на отрезке [-100, 100]. Поэтому у Васи есть шанс найти их методом перебора, но для этого ему придется затратить уйму времени, т.к. возможно необходимо будет осуществить перебор нескольких тысяч значений. Помогите Васе написать программу, которая поможет ему найти корни кубических уравнений!
Входные данные: В единственной строке входного файла INPUT.TXT записаны 4 числа: A, B, C и D – целые коэффициенты кубического уравнения. Каждый коэффициент по модулю меньше 32768.
Выходные данные: В единственную строку выходного файла OUTPUT.TXT нужно вывести через пробел в порядке возрастания все корни заданного кубического уравнения. Кратные корни следует выводить только один раз.
Основные идеи решения
Программа данного алгоритма
var a,b,c,d,i,j,k: integer;
s: array [1..200] of integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(a,b,c,d);
i:=-100;
k:=0;
j:=1;
while (i<>101) do
begin
if (a*i*i*i+b*i*i+c*i+d=0) then
begin
s[j]:=i;
if (j>1) and (s[j]=s[j-1]) then inc(k) else
write(s[j], );
inc(j);
end;
inc(i);
end;
end.
Задача №13 «Быки и коровы»
Постановка задачи
Петя и Вася часто играют в различные логические игры. Недавно Петя поведал Васе о новой игре «Быки и коровы» и теперь они играют в эту игру сутками. Суть игры очень проста: Петя загадывает четырехзначное число, состоящее из различных цифр. Вася отгадывает задуманное Петей число, перебирая возможные варианты. Каждый раз Вася предлагает вариант своего числа, а Петя делает Васе подсказку: сообщает количество быков и коров, после чего Вася с учетом подсказки продолжает отгадывание числа до тех пор, пока не отгадает. Быки – это количество цифр в предложенном Васей числе, совпадающих по значению и стоящих в правильной позиции в задуманном Петей числе. Коровы – количество цифр, совпадающих по значению, но находящихся в неверной позиции. Например, если Петя задумал число 5671, а Вася предложил вариант 7251, то число быков равно 1 (только цифра 1 на своем месте), а число коров равно 2 (только цифры 7 и 5 не на своих местах). Петя силен в математике, но даже он может ошибаться. Помогите Пете написать программу, которая бы по загаданному Петей и предложенному Васей числам сообщала количество быков и коров.
Входные данные: В единственной строке входного файла INPUT.TXT записано два четырехзначных натуральных числа A и B через пробел, где А – загаданное Петей число, а В – предложенный Васей вариант.
Выходные данные: В выходной файл OUTPUT.TXT нужно вывести два целых числа через пробел — количество быков и коров.
Основные идеи решения
Считываем числа как строки.
Проверяем быков, сравнивая элементы строк.
Ищем коров, при помощи вложенного цикла находя одинаковые элементы на разных позициях (i – элементы 1 числа, j - второго).
Выводим быков и коров.
Программа данного алгоритма
var a,b: string[4];
s,i,j,k: integer;
p: char;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(a,p,b);
s:=0;
k:=0;
for i:=1 to 4 do
if a[i]=b[i] then inc(s);
for i:=1 to 4 do
for j:=1 to 4 do
if (a[i]=b[j]) and (i<>j) then inc(k);
write(s, ,k);
end.
Задача №14 «НОК»
Постановка задачи
Требуется написать программу, определяющую наименьшее общее кратное (НОК) чисел a и b.
Входные данные: В единственной строке входного файла INPUT.TXT записаны два натуральных числа А и В через пробел, не превышающих 46340.
Выходные данные: В единственную строку выходного файла OUTPUT.TXT нужно вывести одно целое число — НОК чисел А и В.
Основные идеи решения
Программа данного алгоритма
var a,b:longint;
function NOD(x,y:longint):longint;
begin
if x<>0 then NOD:=NOD(y mod x,x) else NOD:=y;
end;
function NOK(x,y:longint):longint;
begin
NOK:=( x div NOD(x,y) ) * y;
end;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(a,b);
writeln(NOK(a,b));
end.
Задача №21 «Зарплата»
Постановка задачи
В отделе работают 3 сотрудника, которые получают заработную плату в рублях. Требуется определить: на сколько зарплата самого высокооплачиваемого из них отличается от самого низкооплачиваемого.
Входные данные: В единственной строке входного файла INPUT.TXT записаны размеры зарплат всех сотрудников через пробел. Каждая заработная плата – это натуральное число, не превышающее 105.
Выходные данные: В выходной файл OUTPUT.TXT необходимо вывести одно целое число — разницу между максимальной и минимальной зарплатой..
Программа данного алгоритма
var a, b, c, max, min : longint;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(a,b,c);
if (a>b)and(a>c) then max:=a else
if (b>a)and(b>c) then max:=b else
if (c>a)and(c>b) then max:=c;
if (a<b)and(a<c) then min:=a else
if (b<a)and(b<c) then min:=b else
if (c<a)and(c<b) then min:=c;
write(max-min);
end.
Задача №22 «Единицы»
Постановка задачи
На уроках информатики вас, наверное, учили переводить числа из одних систем счисления в другие и выполнять другие подобные операции. Пришло время продемонстрировать эти знания. Найдите количество единиц в двоичной записи заданного числа.
Входные данные: Во входном файле INPUT.TXT записано целое число n (0 ≤ n ≤ 2*109).
Выходные данные: В единственную строку выходного файла OUTPUT.TXT нужно вывести одно целое число — количество двоичных единиц в записи числа n.
Программа данного алгоритма
var s,n:longint;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(n);
s:= 0;
while (n>0) do begin
s:= s + n mod 2;
n:= n div 2; end;
writeln(s);
end.
Задача №23 «Гадание»
Постановка задачи
Как и многие другие девочки, Маша любит разные гадания. Некоторое время назад Маша узнала новый способ гадать на числах – для какого-нибудь интересующего ее натурального числа n надо посчитать сумму всех чисел, на которые n делится без остатка. Маша не очень любит арифметику, и попросила вас написать программу, которая автоматизирует процесс гадания.
Входные данные: В единственной строке входного файла INPUT.TXT записано натуральное число n (n ≤ 1000), которое Маша была вынуждена сообщить.
Выходные данные: В выходной файл OUTPUT.TXT выведите сумму всех натуральных делителей числа n.
Программа данного алгоритма
var k,i,n:integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(n);
for i:=1 to n do
begin
if n mod i = 0 then k:=k+i; end;
write(k);
end.
Задача №25 «Больше-меньше»
Постановка задачи
Одна из основных операций с числами – их сравнение. Мы подозреваем, что вы в совершенстве владеете этой операцией и можете сравнивать любые числа, в том числе и целые. В данной задаче необходимо сравнить два целых числа.
Входные данные: В двух строчках входного файла INPUT.TXT записаны числа A и B, не превосходящие по абсолютной величине 2*109.
Выходные данные: Запишите в выходной файл OUTPUT.TXT один символ “<”, если A < B, “>”, если A > B и “=”, если A=B.
Программа данного алгоритма
var a, b : longint;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(A,B);
if (A<B) then write(<);
if (A>B) then write(>);
if (A=B) then write(=);
end.
Задача №26 «Две окружности»
Постановка задачи
На плоскости даны две окружности. Требуется проверить, пересекаются ли они.
Входные данные: Входной файл INPUT.TXT состоит из двух строк. На каждой строке записана информация об одной окружности – координаты ее центра x и y (целые числа, по модулю не превосходящие 5000) и радиус (целое число 1 ≤ r ≤ 1000).
Выходные данные: В выходной файл OUTPUT.TXT выведите «YES», если окружности пересекаются, и «NO» в противном случае.
Программа данного алгоритма
var x1,x2,y1,y2,r1,r2: integer;
r: real;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(x1,y1,r1);
readln(x2,y2,r2);
r:=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
if (r1+r2>=r) and (r+r2>=r1) and (r1+r>=r2) then writeln(YES) else writeln(NO);
end.
Задача №27 «Художник»
Постановка задачи
Известный художник решил написать новый шедевр. После многих дней усердной работы он захотел исследовать свое творение. Художник вспомнил, что картина писалась следующим образом: сначала был взят белый холст, имеющий форму прямоугольника шириной w и высотой h. Затем художник нарисовал на этом холсте n прямоугольников со сторонами, параллельными сторонам холста и вершинами, расположенными в целочисленных координатах. Помогите художнику определить площадь незакрашенной части холста.
Входные данные: Первая строка входного файла INPUT.TXT содержит два натуральных числа w и h (1 ≤ w, h ≤ 100). Во второй строке записано целое число n (0 ≤ n ≤ 5000) – количество прямоугольников. Следующие n строк содержат информацию о всех прямоугольниках. Каждая строка описывает один прямоугольник в виде четырех чисел x1, y1, x2, y2 , где (x1, y1) и (x2, y2) – координаты левого верхнего и правого нижнего угла прямоугольника соответственно.
Выходные данные: Выведите в выходной файл OUTPUT.TXT одно целое число – площадь незакрашенной части холста.
Основные идеи решения
1. Считываем ширину и высоту холста.
2. Считываем кол-во прямоугольников.
3. Создаем матрицу холста.
4. Вложенным циклом заполняем матрицу единичками по координатам прямоугольников.
5. Проверяем кол-во ячеек не равных 0 и считаем их.
6. Выводим это количество.
Программа данного алгоритма
var w,h,n,k,i,j,x1,x2,y1,y2: integer;
a:array [1..101,1..101] of byte;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(w,h);
for i:=1 to h do
for j:=1 to w do
a[i,j]:=0;
readln(n);
for k:=1 to n do
begin
readln(x1,y1,x2,y2);
for i:=x1+1 to x2 do
for j:=y1+1 to y2 do
a[i,j]:=1;
end;
k:=0;
for i:=1 to h do
for j:=1to w do
if a[i,j]=0 then inc(k);
write(k);
end.
Задача №28 «Симметрия»
Постановка задачи
Многие из вас, вероятно, знакомы с понятием симметрии относительно прямой. Пусть на плоскости расположена прямая L и точка A. Точка B называется симметричной точке A относительно прямой L, если отрезок АВ перпендикулярен прямой L и делится пополам точкой пересечения с ней. В частности, если точка А лежит на прямой L, то точка B совпадает с точкой А.
Задана прямая L, параллельная одной из осей координат, и точка А. Найдите точку В, симметричную А относительно L.
Входные данные: Первая строка входного файла INPUT.TXT содержит 4 числа: x1, y1, x2, y2 – координаты двух различных точек, через которые проходит прямая L. Вторая строка входного файла содержит 2 числа xA и yA – координаты точки А. Все числа во входном файле целые и не превосходят 108 по модулю.
Выходные данные: В выходной файл OUTPUT.TXT выведите числа xB и yB – координаты точки B.
Программа данного алгоритма
var x1,x2,y1,y2,k1,k2: longint;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(x1,y1,x2,y2,k1,k2);
if abs(x1-x2)>0 then write(k1, ,2*y1-k2) else write(2*x1-k1, ,k2)
end.
Задача №33 «Два бандита»
Постановка задачи
Бандиты Гарри и Ларри отдыхали на природе. Решив пострелять, они выставили на бревно несколько банок из-под кока-колы (не больше 10). Гарри начал простреливать банки по порядку, начиная с самой левой, Ларри — с самой правой. В какой-то момент получилось так, что они одновременно прострелили одну и ту же последнюю банку.
Гарри возмутился и сказал, что Ларри должен ему кучу денег за то, что тот лишил его удовольствия прострелить несколько банок. В ответ Ларри сказал, что Гарри должен ему еще больше денег по тем же причинам. Они стали спорить кто кому сколько должен, но никто из них не помнил сколько банок было в начале, а искать простреленные банки по всей округе было неохота. Каждый из них помнили только, сколько банок прострелил он сам.
Определите по этим данным, сколько банок не прострелил Гарри и сколько банок не прострелил Ларри.
Входные данные: В единственной строке входного файла INPUT.TXT записано 2 числа — количество банок, простреленных Гарри и Ларри соответственно.
Выходные данные: В файл OUTPUT.TXT выведите 2 числа — количество банок, не простреленных Гарри и Ларри соответственно.
Программа данного алгоритма
var a, b : longint;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(A,B);
write(B-1, ,A-1);
end.
Задача №43 «Нули»
Постановка задачи
Требуется найти самую длинную непрерывную цепочку нулей в последовательности нулей и единиц.
Входные данные: В единственной строке входного файла INPUT.TXT записана последовательность нулей и единиц (без пробелов). Суммарное количество цифр не превышает 100.
Выходные данные: В единственную строку выходного файла OUTPUT.TXT нужно вывести искомую длину цепочки нулей.
Программа данного алгоритма
var s: string;
m,n,i: integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(s);
m:=0;
n:=0;
for i:=1 to length(s) do
begin
if (s[i]=0) then n:=n+1 else n:=0;
if (n>m) then m:=n;
end;
writeln(m);
end.
Задача №35 «Конечные автоматы»
Постановка задачи
Однажды известный профессор обнаружил описания k конечных автоматов. По его мнению, нетривиальность конечного автомата, имеющего n состояний и m переходов, можно описать целым числом d = 19m + (n + 239)*(n + 366) / 2 . Чем больше d, тем больший интерес для науки представляет изучение его свойств.
Помогите профессору вычислить нетривиальность имеющихся у него автоматов.
Входные данные: Первая строка входного файла INPUT.TXT содержит целое число k (1 ≤ k ≤ 10000) – количество конечных автоматов. Следующие k строк содержат по два целых числа ni (0 ≤ ni ≤ 1000) и mi (0 ≤ mi ≤ 26ni2) – число состояний и переходов i-го автомата.
Выходные данные: Выходной файл OUTPUT.TXT должен состоять из k строк. На i-й строке выходного файла выведите одно число – нетривиальность i-го автомата.
Программа данного алгоритма
var k,i,n,m:longint;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(k);
for i:=1 to k do begin
readln(n,m);
writeln(19*m + (((n + 239)*(n + 366)) div 2));
end;
end.
Задача №46 «Число Е»
Постановка задачи
Выведите в выходной файл округленное до n знаков после десятичной точки число E. Число Е, округленное до 25 знаков после десятичной точки, равно 2.7182818284590452353602875.
Входные данные: Входной файл INPUT.TXT содержит целое число n (0 ≤ n ≤ 25).
Выходные данные: В выходной файл OUTPUT.TXT выведите ответ на задачу.
Программа данного алгоритма
var a,i,code,k1,E1:integer;
E,k,q,q1:string;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(a);
E:=2.7182818284590452353602875;
if a=0 then begin write(3); exit; end;
if a=25 then begin write(2.7182818284590452353602875); exit; end;
for i:=1 to a+2 do begin
k:=k+E[i]; q:=E[i+1]; q1:=E[i]; end;
val(q1,k1,code);
val(q,E1,code);
if E1>=5 then begin k1:=k1+1; delete(k,a+2,1);
write(k,k1); end else write(k);
end.
Задача №52 «Счастливый билет»
Постановка задачи
Вы пользуетесь общественным транспортом? Вероятно, вы расплачивались за проезд и получали билет с номером. Счастливым билетом называют такой билет с шестизначным номером, где сумма первых трех цифр равна сумме последних трех. Т.е. билет с номером 385916 – счастливый, т.к. 3+8+5=9+1+6. Вам требуется написать программу, которая проверяет счастливость билета.
Входные данные: В единственной строке входного файла INPUT.TXT записано одно целое число N (0 ≤ N < 106).
Выходные данные: В выходной файл OUTPUT.TXT нужно вывести «YES», если билет с номером N счастливый и «NO» в противном случае.
Программа данного алгоритма
var s:string;
err,i,k:integer;
b:array[1..6] of integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(s);
for i:=1 to 6 do begin
val(s[i],k,err);
b[i]:=k;end;
if b[1]+b[2]+b[3]=b[4]+b[5]+b[6] then write(YES) else write(NO);
end.
Задача №59 «Несложное вычислением»
Постановка задачи
Задано натуральное число n. Необходимо перевести его в k-ичную систему счисления и найти разность между произведением и суммой его цифр в этой системе счисления.
Например, пусть n = 239, k = 8. Тогда представление числа n в восьмеричной системе счисления — 357, а ответ на задачу равен 3 × 5 × 7 − (3 + 5 + 7) = 90.
Входные данные: Входной файл INPUT.TXT содержит два натуральных числа: n и k (1 ≤ n ≤ 109, 2 ≤ k ≤ 10). Оба этих числа заданы в десятичной системе счисления.
Выходные данные: В выходной файл OUTPUT.TXT выведите ответ на задачу (в десятичной системе счисления).
Основные идеи решения
Считываем число и систему счисления
При помощи операций mod и div выполняем деление столбиком, получая разряды в k-ой системе счисления, сразу складывая и умножая их.
Выводим разность произведения и суммы.
Программа данного алгоритма
var sum,mult,k,n: longint;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(n,k);
sum:=0; mult:=1;
while(n>0) do begin
sum:= sum + n mod k;
mult:= mult * (n mod k);
n:= n div k; end;
write(mult-sum);
end.
Задача №61 «Баскетбол»
Постановка задачи
Известны результаты каждой из 4х четвертей баскетбольной встречи. Нужно определить победителя матча.
Входные данные: Входной файл INPUT.TXT содержит 4 строки, в каждой строке находится два целых числа a и b – итоговый счет в соответствующей четверти. а – количество набранных очков за четверть первой командой, b – количество очков, набранных за четверть второй командой. (0 ≤ a,b ≤ 100).
Выходные данные: В выходной файл OUTPUT.TXT выведите номер выигравшей команды, в случае ничьей следует вывести «DRAW».
Программа данного алгоритма
var a,b,i,a1,b1:integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
for i:=1 to 4 do begin readln(a,b);
a1:=a1+a; b1:=b1+b; end;
if a1>b1 then write(1) else if a1<b1 then write(2) else write(DRAW);
end.
Задача №62 «Клетки»
Постановка задачи
Известно, что шахматная доска имеет размерность 8х8 и состоит из клеток 2х цветов, например, черного и белого (см. рисунок). Каждая клетка имеет координату, состоящую из буквы и цифры. Горизонтальное расположение клетки определяется буквой от A до H, а вертикальное – цифрой от 1 до 8. Заметим, что клетка с координатой А1 имеет черный цвет. Требуется по заданной координате определить цвет клетки.
Входные данные: В единственной строке входного файла INPUT.TXT записана координата клетки на шахматной доске: всего два символа – буква и цифра (без пробелов).
Выходные данные: В выходной файл OUTPUT.TXT нужно вывести «WHITE», если указанная клетка имеет белый цвет и «BLACK», если она черная.
Программа данного алгоритма
var k:string;
m,n:integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(k);
if k[1]=A then m:=1;
if k[1]=B then m:=2;
if k[1]=C then m:=3;
if k[1]=D then m:=4;
if k[1]=E then m:=5;
if k[1]=F then m:=6;
if k[1]=G then m:=7;
if k[1]=H then m:=8;
if k[2]=1 then n:=1;
if k[2]=2 then n:=2;
if k[2]=3 then n:=3;
if k[2]=4 then n:=4;
if k[2]=5 then n:=5;
if k[2]=6 then n:=6;
if k[2]=7 then n:=7;
if k[2]=8 then n:=8;
if (n mod 2=0) and (m mod 2=0) then begin write(BLACK); exit; end;
if n*m mod 2=0 then write(WHITE) else write(BLACK);
end.
Задача №63 «Загадка»
Постановка задачи
Петя и Катя – брат и сестра. Петя – студент, а Катя – школьница. Петя помогает Кате по математике. Он задумывает два натуральных числа X и Y (X,Y≤1000), а Катя должна их отгадать. Для этого Петя делает две подсказки. Он называет сумму этих чисел S и их произведение P. Помогите Кате отгадать задуманные Петей числа.
Входные данные: Входной файл INPUT.TXT содержит два натуральных числа S и P, разделенных пробелом.
Выходные данные: В выходной файл OUTPUT.TXT выведите два числа Х и Y, загаданные Петей. Числа следует вывести в порядке неубывания своих значений, разделенные пробелом.
Программа данного алгоритма
var s,p,y,x: integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(s,p);
for x:=1 to 1000 do begin
y:=s-x;
if (x<=y) and (x*y=p) then write(x, ,y);
end;
end.
Задача №66 «Клавиатура»
Постановка задачи
Для данной буквы латинского алфавита нужно вывести справа стоящую букву на стандартной клавиатуре. При этом клавиатура замкнута, т.е. справа от буквы «p» стоит буква «a», от буквы «l» стоит буква «z», а от буквы «m» — буква «q».
Входные данные: Входной файл INPUT.TXT содержит один символ — маленькую букву латинского алфавита.
Выходные данные: В выходной файл OUTPUT.TXT следует вывести букву стоящую справа от заданной буквы, с учетом замкнутости клавиатуры.
Программа данного алгоритма
var k:char;
s:string;
i:integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(k);
if k=m then begin write(q); exit; end;
s:=qwertyuiopasdfghjklzxcvbnm;
for i:=1 to length(s) do
if k=s[i] then write(s[i+1]);
end.
Задача №81 «Арбузы»
Постановка задачи
Иван Васильевич пришел на рынок и решил купить два арбуза: один для себя, а другой для тещи. Понятно, что для себя нужно выбрать арбуз потяжелей, а для тещи полегче. Но вот незадача: арбузов слишком много и он не знает как же выбрать самый легкий и самый тяжелый арбуз? Помогите ему!
Входные данные: В первой строке входного файла INPUT.TXT задано одно число N – количество арбузов. Вторая строка содержит N чисел, записанных через пробел. Здесь каждое число – это масса соответствующего арбуза. Все числа натуральные и не превышают 30000.
Выходные данные: В выходной файл OUTPUT.TXT нужно вывести два числа через пробел: массу арбуза, который Иван Васильевич купит теще и массу арбуза, который он купит себе
Программа данного алгоритма
var a,i,n,min,max : integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(n);
read(min);
max:=min;
for i:=2 to n do
begin
read(a);
if a<min then min:=a else
if a>max then max:=a;
end;
write(min, ,max)
end.
Задача №86 «Головоломка про ферзей»
Постановка задачи
Вероятно, что многие из вас играли в шахматы. Поэтому вы знаете, что ферзь может двигаться как по диагоналям, так и по горизонталям.
Вася недавно начал заниматься шахматами и где-то прочел головоломку, в которой нужно было расставить максимальное количество ферзей на доске 8х8 так, чтобы хотя бы одно поле оказалось небитым. Эта задача легко решается для доски 3х3, т.к. понятно, что более двух ферзей расставить таким образом на ней невозможно.
Помогите Васе решить эту задачу для доски NxN.
Входные данные: В единственной строке входного файла INPUT.TXT записано натуральное число N – размеры шахматной доски NxN (1 ≤ N ≤ 100).
Выходные данные: В единственную строку выходного файла OUTPUT.TXT нужно вывести максимальное количество ферзей, которых можно расставить на шахматной доске NxN так, чтобы одна клетка оставалась небитой.
Программа данного алгоритма
var n: integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(n);
write ((n-1)*(n-2));
end.
Задача №92 «Журавлики»
Постановка задачи
Петя, Катя и Сережа делают из бумаги журавликов. Вместе они сделали S журавликов. Сколько журавликов сделал каждый ребенок, если известно, что Петя и Сережа сделали одинаковое количество журавликов, а Катя сделала в два раза больше журавликов, чем Петя и Сережа вместе?
Входные данные: В единственной строке входного файла INPUT.TXT записано одно натуральное число S – общее количество сделанных журавликов (S < 106).
Выходные данные: В единственную строку выходного файла OUTPUT.TXT нужно вывести три числа, разделенных пробелами – количество журавликов, которые сделал каждый ребенок (Петя, Катя и Сережа).
Программа данного алгоритма
var s:longint;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(s);
write(s div 6, ,4*(s div 6), ,s div 6);
end.
Задача №106 «Монетки»
Постановка задачи
На столе лежат n монеток. Некоторые из них лежат вверх решкой, а некоторые – гербом. Определите минимальное число монеток, которые нужно перевернуть, чтобы все монетки были повернуты вверх одной и той же стороной.
Входные данные: В первой строке входного файла INPUT.TXT записано натуральное число N (1 <= N <= 100) – число монеток. В каждой из последующих N строк содержится одно целое число – 1 если монетка лежит решкой вверх и 0 если вверх гербом.
Выходные данные: В выходной файл OUTPUT.TXT выведите минимальное количество монет, которые нужно перевернуть.
Программа данного алгоритма
var n,k,r,o:longint;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(n);
while n>0 do
begin
read(k);
if k=1 then r:=r+1 else o:=o+1;
n:=n-1;
end;
if r>=o then write(o) else write(r);
end.
Задача №108 «Неглухой телефон»
Постановка задачи
Возможно, что Вы когда то играли в игру «Глухой телефон», либо слышали о ней. В этой игре участникам приходится передавать информацию друг другу различными способами: словесно, образно, бывает даже приходится писать левой рукой текст, который другой участник команды должен будет прочитать. Так же известно, что практически никогда передаваемая информация не доходит до конечного адресата. Обозначим за Fi(x) функцию, которая преобразует текст передаваемой информации x в ту, которую получит участник i+1 от участника i. Тогда последний n-й участник получит данные y, которые будут выражаться следующей формулой:
y = Fn-1(Fn-2(…F2(F1(x))))
Но Вам необходимо исключить какие-либо внешние факторы, которые могут исказить исходную информацию и Вы должны реализовать программу «неглухой телефон», которая сможет безошибочно доставлять исходные данные, т.е. в нашем случае функция Fi(x) = x для всех i от 1 до n-1.
Входные данные: В единственной строке входного файла INPUT.TXT записано натуральное число от 1 до 100.
Выходные данные: В выходной файл OUTPUT.TXT нужно вывести в точности то же число, которое задано во входном файле.
Программа данного алгоритма
var a : longint;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(a);
write(a);
end.
Задача №114 «Без двух нулей подряд»
Постановка задачи
Требуется вычислить количество N-значных чисел в системе счисления с основанием K, таких, что их запись не содержит двух подряд идущих нулей.
Входные данные: Во входном файле INPUT.TXT записаны два натуральных числа N и K в десятичной системе счисления (2 ≤ K ≤ 10; 2 ≤ N; 4 ≤ N+K ≤ 18).
Выходные данные: В выходной файл OUTPUT.TXT необходимо вывести целое число в десятичной записи – ответ на задачу.
Программа данного алгоритма
var n,k,i:integer;
d,d0:array [1..1000] of integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(n,k);
d[1]:=k-1; d0[1]:=0;
for i:=2 to n do
begin
d[i] := (d[i-1]+d0[i-1])*(k-1);
d0[i] := d[i-1];
end;
write(d[n]+d0[n]);
end.
Задача №124 «Светофорчики»
Постановка задачи
В подземелье M тоннелей и N перекрестков, каждый тоннель соединяет какие-то два перекрестка. Мышиный король решил поставить по светофору в каждом тоннеле перед каждым перекрестком. Напишите программу, которая посчитает, сколько светофоров должно быть установлено на каждом из перекрестков. Перекрестки пронумерованы числами от 1 до N.
Входные данные: Во входном файле INPUT.TXT записано два числа N и M (0 < N <= 100, 0 <= M <= N*(N-1)/2). В следующих M строках записаны по два числа i и j (1 <= i,j <= N), которые означают, что перекрестки i и j соединены тоннелем. Можно считать, что любые два перекрестка соединены не более, чем одним тоннелем. Нет тоннелей от перекрестка i до него самого.
Выходные данные: В выходной файл OUTPUT.TXT вывести N чисел: k-ое число означает количество светофоров на k-ом перекрестке.
Основные идеи решения
Считываем M и N.
Каждый последующий элемент(перекресток) рассматриваем как номер ячейки массива и увеличиваем ячейку на 1
Выводим массив
Программа данного алгоритма
var n,m,i,k:integer;
a:array[1..100] of integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(n,m) ;
for i:=1 to 2*m do begin read(k);
a[k]:=a[k]+1; end;
for i:=1 to n do
write(a[i], );
end.
Задача №131 «Перепись»
Постановка задачи
В доме живет N жильцов. Однажды решили провести перепись всех жильцов данного дома и составили список, в котором указали возраст и пол каждого жильца. Требуется найти номер самого старшего жителя мужского пола.
Входные данные: Во входном файле INPUT.TXT в первой строке задано натуральное число N – количество жильцов (N<=100). В последующих N строках располагается информация о всех жильцах: каждая строка содержит два целых числа: V и S – возраст и пол человека (1<=V<=100, S – 0 или 1). Мужскому полу соответствует значение S=1, а женскому – S=0.
Выходные данные: Выходной файл OUTPUT.TXT должен содержать номер самого старшего мужчины в списке. Если таких жильцов несколько, то следует вывести наименьший номер. Если жильцов мужского пола нет, то выведите -1.
Программа данного алгоритма
var i,j,a,b,max,res: integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(i);
res:=101;
for j:=1 to i do begin
readln(a,b);
if (b=1)and(max<a) then max:=a;
end;
if max<>0 then begin
reset(input);
readln(i);
for j:= 1 to i do begin
readln(a,b);
if b=1 then
if a=max then
if res>j then res:=j;
end;
end;
if res=101 then writeln(-1) else writeln(res);
end.
Задача №147 «Светофорчики»
Постановка задачи
Последовательностью Фибоначчи называется последовательность чисел a0, a1, ..., an, ..., где
Требуется найти N-е число Фибоначчи.
Входные данные: Во входном файле INPUT.TXT записано целое число N (0 ≤ N ≤ 30).
Выходные данные: В выходной файл OUTPUT.TXT выведите N-е число Фибоначчи.
Программа данного алгоритма
var N,i:integer;
a:array[0..30] of integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(N);
a[0]:=0;
a[1]:=1;
for i:=2 to N do begin
a[i]:=a[i-1]+a[i-2]; end;
write(a[N]);
end.
Задача №148 «НОД»
Постановка задачи
Даны два натуральных числа A и B. Требуется найти их наибольший общий делитель (НОД).
Входные данные: Во входном файле INPUT.TXT в единственной строке записаны натуральные числа A и B через пробел (A, B ≤ 109).
Выходные данные: В выходной файл OUTPUT.TXT выведите НОД чисел А и В.
Программа данного алгоритма
var a,b:longint;
function NOD(x,y:longint):longint;
begin
if x<>0 then NOD:=NOD(y mod x,x) else NOD:=y;
end;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(a,b);
writeln( NOD(a,b) );
end.
Задача №149 «Разворот»
Постановка задачи
Дано натуральное число N и последовательность из N элементов. Требуется вывести эту последовательность в обратном порядке.
Входные данные: В первой строке входного файла INPUT.TXT записано натуральное число N (N ≤ 103). Во второй строке через пробел идут N целых чисел, по модулю не превосходящих 103 - элементы последовательности.
Выходные данные: В выходной файл OUTPUT.TXT выведите заданную последовательность в обратном порядке.
Программа данного алгоритма
var n,i:longint; a:array[1..100000] of integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(n);
for i:=1 to n do read(a[i]);
for i:=n downto 1 do write(a[i], );
end.
Задача №163 «Уравнение для 5 класса!»
Постановка задачи
Уравнение для пятиклассников представляет собой строку длиной 5 символов. Второй символ строки является либо знаком + (плюс) либо - (минус), четвёртый символ — знак = (равно). Из первого, третьего и пятого символов ровно два являются цифрами из диапазона от 0 до 9, и один — буквой x, обозначающей неизвестное.
Требуется написать программу, которая позволит решить данное уравнение относительно x.
Входные данные: Входной файл INPUT.TXT состоит из одной строки, в которой записано уравнение.
Выходные данные: В выходной файл OUTPUT.TXT выведите целое число — значение x.
Основные идеи решения
Считываем 6 символов
Если 2 символ + и 1 символ х то x=f-c.
Если 2 символ + и 3 символ х то x=f-a.
Если 2 символ + и 5 символ х то x=a+c.
Если 2 символ - и 1 символ х то x=f+c.
Если 2 символ - и 3 символ х то x=a-f.
Если 2 символ - и 5 символ х то x=a-c.
Программа данного алгоритма
uses SysUtils;
var a,b,c,d,f: char;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(a,b,c,d,f);
if b=+ then
if a=x then write(strtoint(f)-strtoint(c)) else
if c=x then write(strtoint(f)-strtoint(a)) else
if f=x then write(strtoint(a)+strtoint(c));
if b=- then
if a=x then write(strtoint(f)+strtoint(c)) else
if c=x then write(strtoint(a)-strtoint(f)) else
if f=x then write(strtoint(a)-strtoint(c));
end.
Задача №195 «Эния»
Постановка задачи
Неспокойно сейчас на стапелях шестого дока межгалактического порта планеты Торна. Всего через месяц закончится реконструкция малого броненесущего корвета “Эния”. И снова этому боевому кораблю и его доблестной команде предстоят тяжелые бои за контроль над плутониевыми рудниками Сибелиуса. Работа не прекращается ни на секунду, лазерные сварочные аппараты работают круглые сутки. От непрерывной работы плавятся шарниры роботов-ремонтников. Но задержаться нельзя ни на секунду.
И вот в этой суматохе обнаруживается, что термозащитные панели корвета вновь требуют срочной обработки сульфидом тория. Известно, что на обработку одного квадратного метра панели требуется 1 нанограмм сульфида. Всего необходимо обработать N прямоугольных панелей размером A на B метров. Вам необходимо как можно скорее подсчитать, сколько всего сульфида необходимо на обработку всех панелей “Энии”. И не забудьте, что панели требуют обработки с обеих сторон.
Входные данные: Во входном файле INPUT.TXT содержатся 3 целых положительных числа N (N <= 100), A (A <= 100), B (B <= 100)
Выходные данные: В выходной файл OUTPUT.TXT нужно вывести единственное число – вес необходимого для обработки сульфида тория в нанограммах.
Программа данного алгоритма
var n,a, b : longint;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(N,A,B);
write(A*B*N*2);
end.
Задача №233 «Автобусная экскурсия»
Постановка задачи
Оргкомитет Московской городской олимпиады решил организовать обзорную экскурсию по Москве для участников олимпиады. Для этого был заказан двухэтажный автобус (участников олимпиады достаточно много и в обычный они не умещаются) высотой 437 сантиметров. На экскурсионном маршруте встречаются N мостов. Жюри и оргкомитет олимпиады очень обеспокоены тем, что высокий двухэтажный автобус может не проехать под одним из них. Им удалось выяснить точную высоту каждого из мостов. Автобус может проехать под мостом тогда и только тогда, когда высота моста превосходит высоту автобуса.
Помогите организаторам узнать, закончится ли экскурсия благополучно, а если нет, то установить, где произойдет авария.
Входные данные: Во входном файле INPUT.TXT сначала содержится число N (1<=N<=1000). Далее идут N натуральных чисел, не превосходящих 10000 - высоты мостов в сантиметрах в том порядке, в котором они встречаются на пути автобуса.
Выходные данные: В единственную строку выходного файла OUTPUT.TXT нужно вывести фразу "No crash", если экскурсия закончится благополучно. Если же произойдет авария, то нужно вывести сообщение "Crash k", где k - номер моста, где произойдет авария. Фразы выводить без кавычек ровно с одним пробелом внутри.
Программа данного алгоритма
var a,i,x,n : integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(n);
x:=0;
for i:=1 to n do
begin
read(a);
if a>437 then x:=x+1 else break;
end;
if x=n then write (No crash) else write (Crash ,x+1)
end.
Задача №266 «Оттепель»
Постановка задачи
Уставшие от необычно теплой зимы, жители решили узнать, действительно ли это самая длинная оттепель за всю историю наблюдений за погодой. Они обратились к синоптикам, а те, в свою очередь, занялись исследованиями статистики за прошлые годы. Их интересует, сколько дней длилась самая длинная оттепель.
Оттепелью они называют период, в который среднесуточная температура ежедневно превышала 0 градусов Цельсия. Напишите программу, помогающую синоптикам в работе.
Входные данные: Во входном файле INPUT.TXT сначала записано число N – общее количество рассматриваемых дней (1 ≤ N ≤ 100). В следующей строке через пробел располагается N целых чисел, разделенных пробелами. Каждое число – среднесуточная температура в соответствующий день. Температуры – целые числа и лежат в диапазоне от –50 до 50.
Выходные данные: В выходной файл OUTPUT.TXT требуется вывести одно число – длину самой продолжительной оттепели, то есть наибольшее количество последовательных дней, на протяжении которых среднесуточная температура превышала 0 градусов. Если температура в каждый из дней была неположительной, выведите 0.
Программа данного алгоритма
var s,m,k,n,i: integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(s);
m:=0;
n:=0;
for i:=1 to s do
begin
read(k);
if k>0 then n:=n+1 else n:=0;
if (n>m) then m:=n;
end;
writeln(m);
end.
Задача №271 «Числа Фибоначчи - 2»
Постановка задачи
Числа Фибоначчи строятся следующим образом: 1, 1, 2, 3, 5, …. В этой последовательности, начиная с третьего числа, каждый следующий член равен сумме двух предыдущих. Получаем, что, например, шестое число равно 8, а десятое - 55.
Требуется написать программу, которая определяет, является ли заданное число числом Фибоначчи.
Входные данные: Входной текстовый файл INPUT.TXT содержит одно натуральное число в диапазоне от 2 до 1200000000.
Выходные данные: Выходной файл OUTPUT.TXT должен содержать в первой строке 1, если заданное число является числом Фибоначчи, и 0, иначе. В первом случае во вторую строку требуется вывести его порядковый номер.
Программа данного алгоритма
var N,i:integer;
a:array[0..100000] of integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(N);
a[0]:=0;
a[1]:=1;
for i:=2 to 100000 do begin
a[i]:=a[i-1]+a[i-2]; if a[i]=n then begin writeln(1); writeln(i); exit; end ; end;
write(0);
end.
Задача №272 «Сумма максимума и минимума»
Постановка задачи
Задана последовательность целых чисел. Числа нумеруются по порядку следования, начиная с единицы.
Требуется написать программу, которая найдет сумму максимума из чисел с четными номерами и минимума из чисел с нечетными номерами – max{a2, a4, …}+min{a1, a3, …}.
Входные данные: Входной текстовый файл INPUT.TXT содержит в единственной строке последовательность от 2 до 2*105 целых чисел, которые по модулю не превышают 10000
.
Выходные данные: Выходной текстовый файл OUTPUT.TXT должен содержать одно целое число - сумму максимума из чисел с четными номерами и минимума из чисел с нечетными номерами.
Основные идеи решения
Считываем по 2 числа, первое сравниваем с минимумом и переприсваиваем, если нужно, а второе с максимумом.
Выводим сумму максимума и минимума.
Программа данного алгоритма
var i,j,max,min:integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(min,max);
while not eoln do
begin
read(i);
if (i<min) then min:=i;
if not eoln then read(j);
if j>max then max:=j;
end;
write(min+max)
end.
Задача №284 «Подмассив массива»
Постановка задачи
Пусть задан массив целых чисел а1, а2, ..., аn. Назовем его подмассивом f(i,j) массив, составленный из чисел массива аi, ai+1,..., aj-1, aj. Напишите программу, которая будет выводить подмассивы массива a.
Входные данные: Первая строка входного файла INPUT.TXT содержит число n (1 <= n <= 1000) - количество элементов в массиве а. Во второй строке содержатся числа a1, a2, … , аn разделенные пробелом. Все аi находятся в диапазоне от -231 до 231 - 1. В третьей строке находится m (1 <= m <= 100) — количество подмассивов, которые необходимо вывести. Следующие m строк содержат пары чисел ik, jk (1 <= ik <= jk <= n).
Выходные данные: В выходной файл OUTPUT.TXT для каждой пары (ik,jk) в отдельной строке выведите подмассив f(ik,jk).
Программа данного алгоритма
var a:array[1..1000] of longint;
n,b,c,i,k:integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(n);
for i:=1 to n do
read(a[i]);
readln(n);
for i:=1 to n do begin
read(b,c);
for k:=b to c do
write(a[k], ); end;
end.
Задача №294 «Болты и гайки»
Постановка задачи
Вновь созданная фирма купила заброшенные склады на окраине города. Новому заведующему складами поручили произвести учёт в короткие сроки. Всё шло хорошо, пока случайно не рассыпали контейнеры с болтами и гайками на каждом складе, после чего собрали их в общие (для болтов и гаек) контейнеры, потеряв при этом несколько деталей.
Помогите оценить нанесённый ущерб на каждом складе, приняв во внимание, что, помимо потерянных деталей, болт (или гайка) считается непригодным, если он не имеет соответствующей гайки (или болта).
Входные данные: Во входном файле INPUT.TXT описано текущее положение на складе. В первой строке через пробел записаны три целых числа: k1, l1, m1 – начальное число болтов (100<=k1<=30000, k1 кратно 100), процент потерянных деталей (0<=l1<=100) и стоимость одного болта (1<=m1<=100) соответственно. Во второй строке через пробел записаны также три целых числа: k2, l2, m2 – начальное число гаек (100<=k2<=30000, k2 кратно 100), процент потерянных деталей (0<=l2<=100) и стоимость одной гайки (1<=m2<=100) соответственно.
Выходные данные: В выходной OUTPUT.TXT выведите одно целое число – размер ущерба.
Программа данного алгоритма
var a,b,l1,k1,m1,max,l2,m2,k2:real;t:integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(k1,l1,m1);
a:=k1-k1*l1*0.01;
readln(k2,l2,m2);
b:=k2-k2*l2*0.01;
if a>b then max:=a else max:=b;
max:=max-abs(a-b);
t:=round((k1-max)*m1+(k2-max)*m2);
write(t);
end.
Задача №296 «Лиса Алиса и кот Базилио»
Постановка задачи
Лиса Алиса и кот Базилио вырастили денежное дерево. И выросли на нем трехрублевые и пятирублевые золотые монеты. Лиса Алиса себе взяла трехрублевые монеты, а коту Базилио отдала пятирублевые монеты. Посетовав на свою скромность, она предложила впредь рассчитываться за покупки вместе, деньги давать без сдачи и минимальным числом монет. Известно, что они сделали покупку стоимостью N рублей, при этом они рассчитались без сдачи.
Вам следует написать программу, которая определяет: сколько монет внес кот Базилио, и сколько монет внесла лиса Алиса.
Входные данные: Во входном файле INPUT.TXT записано одно натуральное число N – стоимость покупки в рублях (7 < N < 1000).
Выходные данные: В выходной OUTPUT.TXT выведите два целых числа через пробел: число монет, которые отдал кот Базилио и число монет, которые отдала лиса Алиса.
Программа данного алгоритма
var i,j,n:integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(n);
for j:=0 to 500 do begin
for i:=0 to 210 do
if i*5+j*3=n then begin write(i, ,j); exit; end; end;
end.
Задача №297 «Кругляши»
Постановка задачи
Однажды в просторах рунета появился следующий ребус:
157892 = 3
203516 = 2
409578 = 4
236271 = ?
Никто так и не смог его разгадать. Позже оказалось, что число в правом столбце равно сумме "кругляшей", которые есть в цифрах числа, расположенного слева. Ваша задача написать программу, которая определяет, сколько кругляшей в числе.
Входные данные: Во входном файле INPUT.TXT записано целое число N (0 <= N <= 10100).
Выходные данные: В выходной файл OUTPUT.TXT выведите одно число – количество кругляшей в числе N.
Программа данного алгоритма
var
s:string;
k,i:integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(s);
k:=0;
for i:=1 to length(s) do begin
if (s[i]=6) or (s[i]=9) or (s[i]=0) then k:=k+1;
if s[i]=8 then k:=k+2; end;
write(k);
end.
Задача №312 «Арифметическая прогрессия»
Постановка задачи
Заданы первый и второй элементы арифметической прогрессии. Требуется написать программу, которая вычислит элемент прогрессии по ее номеру.
Входные данные: Входной файл INPUT.TXT содержит три целых числа, разделенных пробелами – первый элемент прогрессии A1 (1 ≤ A1 ≤ 1000), второй элемент прогрессии A2 (1 ≤ A2 ≤ 1000), и номер требуемого элемента N (1 ≤ N ≤ 1000).
Выходные данные: Выходной файл OUTPUT.TXT должен содержать одно целое число - N-й элемент арифметической прогрессии.
Программа данного алгоритма
var k,i,n,a,b:integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(a,b,n);
k:=b-a;
for i:=2 to n do
a:=a+k;
write(a);
end.
Задача №324 «Четырехзначный палиндром»
Постановка задачи
Требуется написать программу, определяющую, является ли четырехзначное натуральное число N палиндромом, т.е. числом, которое одинаково читается слева направо и справа налево.
Входные данные: Входной файл INPUT.TXT содержит натуральное число N (1000 ≤ N ≤ 9999).
Выходные данные: В выходной файл OUTPUT.TXT следует вывести слово «YES», если число N является палиндромом, или «NO» – если нет.
Программа данного алгоритма
var a,a1,a2,a3,a4:integer;
begin
assign (input,input.txt);
assign (output,output.txt);
read (a);
a1:=a mod 10;
a2:=(a mod 100) div 10;
a3:=(a mod 1000) div 100;
a4:=a div 1000;
if (a1=a4) and (a2=a3) then write(YES) else write(NO);
end.
Задача №327 «В одном шаге от счастья»
Постановка задачи
Вова купил билет в трамвае 13-го маршрута и сразу посчитал суммы первых трёх цифр и последних трёх цифр номера билета (номер у билета шестизначный). Оказалось, что суммы отличаются ровно на единицу. «Я в одном шаге от счастья», — подумал Вова, — «или предыдущий или следующий билет точно счастливый». Прав ли он?
Входные данные: Входной файл INPUT.TXT содержит в первой строке число K – количество тестов. В следующих K строках записаны номера билетов. Количество тестов не больше 10. Номер состоит ровно из шести цифр, среди которых могут быть и нули. Гарантируется, что Вова умеет считать, то есть суммы первых трех цифр и последних трех цифр отличаются ровно на единицу.
Выходные данные: Выходной файл OUTPUT.TXT должен содержать K строк, в каждой из которых для соответствующего теста следует указать "Yes", если Вова прав, и "No", если нет.
Программа данного алгоритма
var n,i,b,a1,a2,a3,b1,b2,b3: integer;
s:string;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(n);
for i:=1 to n do
begin
readln(s);
a1:=ord(s[1])-48;
a2:=ord(s[2])-48;
a3:=ord(s[3])-48;
b1:=ord(s[4])-48;
b2:=ord(s[5])-48;
b3:=ord(s[6])-48;
b:=b1*100+b2*10+b3+1;
b1:=b div 100;
b2:=(b div 10) mod 10;
b3:=b mod 10;
if a1+a2+a3=b1+b2+b3 then
writeln(Yes) else begin
b:=b1*100+b2*10+b3-2;
b1:=b div 100;
b2:=(b div 10) mod 10;
b3:=b mod 10;
if a1+a2+a3=b1+b2+b3 then
writeln(Yes) else
writeln(No) end;
end;
end.
Задача №439 «Закон Амдала»
Постановка задачи
Параллельное программирование изучает методы построения программ, которые будут выполняться на нескольких процессорах. В результате решения одной из первых задач этого раздела информатики появился закон Амдала.
Задача Амдала формулировалась так. Имеется n процессоров и p процентов вычислений не могут выполняться параллельно. Во сколько раз быстрее можно выполнить вычисления по сравнению с одним процессором?
Например, если n = 10, p = 50, а на одном процессоре все вычисления выполняются за время t. Тогда первая половина вычислений (50%) будет выполнена за время t/(2•10) , а вторая - за время t/2. Общее время вычислений в этом случае составит t/2 + t/20 = 11•t/20, а ускорение по сравнению с одним процессором составит 20/11 раза.
Если же n = 10, p = 25, и на одном процессоре все вычисления выполняются за время t. Тогда 75% вычислений будут выполнены за время 3•t/(4•10) , а оставшиеся 25% - за время t/4 . Общее время вычислений в этом случае составит t/4 + 3•t/40 = 13•t/40, а ускорение по сравнению с одним процессором составит 40/13 раза.
Даны числа n и p. Напишите программу, решающую задачу Амдала.
Входные данные: Входной файл INPUT.TXT содержит 2 целых числа n и p. (1 <= n <= 1000, 0 <= p <= 100).
Выходные данные: В выходной файл OUTPUT.TXT выведите ответ на задачу с точностью, не меньшей 10-6.
Программа данного алгоритма
var b,a,c: real;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(a,b) ;
c:=(1*0.01*b)+((1*0.01*(100-b))/a);
write(1/c);
end.
Задача №446 «Табло»
Постановка задачи
На хоккейном стадионе в одном большом городе расположено большое прямоугольное табло. Оно имеет n строк и m столбцов (то есть состоит из n x m ячеек). Во время хоккейного матча это табло служит для отображения счета и времени, прошедшего с начала тайма, а в перерывах на нем показывают различную рекламу.
В связи с этим возникла задача проверки возможности показа на этом табло определенной рекламной заставки. Заставка также, как и табло, имеет размер n строк на m столбцов. Каждая из ячеек заставки окрашена в один из четырех цветов - трех основных: красный - R, зеленый - G, синий - B и черный - .(точка).
Каждая из ячеек табло характеризуется своими цветопередаточными возможностями. Любая из ячеек табло может отображать черный цвет - это соответствует тому, что на нее вообще не подается напряжение. Также каждая из ячеек может отображать некоторое подмножество множества основных цветов. В этой задаче эти подмножества будут кодироваться следующим образом:
0 - ячейка может отображать только черный цвет;
1 - ячейка может отображать только черный и синий цвета;
2 - ячейка может отображать только черный и зеленый цвета;
3 - ячейка может отображать только черный, зеленый и синий цвета;
4 - ячейка может отображать только черный и красный цвета;
5 - ячейка может отображать только черный, красный и синий цвета;
6 - ячейка может отображать только черный, красный и зеленый цвета;
7 - ячейка может отображать только черный, красный, зеленый и синий цвета.
Напишите программу, которая по описанию табло и заставки определяет: возможно ли на табло отобразить эту заставку.
Входные данные: Первая строка входного файла INPUT.TXT содержит целые числа n и m (1 <= n, m <= 100). Далее идут n строк по m символов каждая - описание заставки. Каждый из символов описания заставки принадлежит множеству {R, G, B, .} . Их значения описаны выше.
После этого идет описание табло. Оно содержит n строк по m чисел, разделенных пробелами. Значения чисел описаны выше.
Выходные данные: В выходной файл OUTPUT.TXT выведите YES, если на табло возможно отобразить заставку и NO - в противном случае.
Программа данного алгоритма
var
b: array[1..100, 1..100] of char;
a: array[1..100, 1..100] of byte;
s: string;
i, j, k, n, t,u : integer;
q, w: boolean;
begin
assign(input,input.txt);assign(output,output.txt);
readln(k,n);
for i := 1 to k do
begin
for j := 1 to n do
read(b[i,j]);
readln
end;
for i := 1 to k do
for j := 1 to n do
read(a[i,j]);
w := true;
for i := 1 to k do
for j := 1 to n do
begin
q := (a[i,j] = 1) and (b[i,j] in [B,.]) or
(a[i,j] = 2) and (b[i,j] in [G,.]) or
(a[i,j] = 3) and (b[i,j] in [G,B,.]) or
(a[i,j] = 4) and (b[i,j] in [R,.]) or
(a[i,j] = 5) and (b[i,j] in [B,R,.]) or
(a[i,j] = 6) and (b[i,j] in [G,R,.]) or
(a[i,j] = 7) and (b[i,j] in [G,R,.,B]) or
(a[i,j] = 0) and (b[i,j] in [.]);
w := w and q;
end;
if w then write(YES) else write(NO);
end.
Задача №496 «Сбор черники»
Постановка задачи
В фермерском хозяйстве в Карелии выращивают чернику. Она растет на круглой грядке, причем кусты высажены только по окружности. Таким образом, у каждого куста есть ровно два соседних. Всего на грядке растет N кустов.
Эти кусты обладают разной урожайностью, поэтому ко времени сбора на них выросло различное число ягод – на i-ом кусте выросло ai ягод.
В этом фермерском хозяйстве внедрена система автоматического сбора черники. Эта система состоит из управляющего модуля и нескольких собирающих модулей. Собирающий модуль за один заход, находясь непосредственно перед некоторым кустом, собирает ягоды с этого куста и с двух соседних с ним.
Напишите программу для нахождения максимального числа ягод, которое может собрать за один заход собирающий модуль, находясь перед некоторым кустом заданной во входном файле грядки.
Входные данные: Первая строка входного файла INPUT.TXT содержит целое число N (3 <= N <= 1000) – количество кустов черники. Вторая строка содержит N целых положительных чисел a1, a2, ..., aN – число ягод черники, растущее на соответствующем кусте. Все ai не превосходят 1000.
Выходные данные: В выходной файл OUTPUT.TXT выведите ответ на задачу.
Программа данного алгоритма
var a: array [1..1003] of integer;
n,max,i: integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(n);
for i:=1 to n do
read(a[i]);
a[n+1]:=a[1];
a[n+2]:=a[2];
max:=a[1]+a[3]+a[2];
for i:=1 to n do
if (a[i]+a[i+2]+a[i+1])>max then max:=a[i]+a[i+2]+a[i+1];
write(max);
end.
Задача №504 «Цветочки»
Постановка задачи
В рождественский вечер на окошке стояло три цветочка, слева на право: герань, крокус и фиалка. Каждое утро Маша вытирала окошко и меняла местами стоящий справа цветок с центральным цветком. А Таня каждый вечер поливала цветочки и меняла местами левый и центральный цветок. Требуется определить порядок цветов ночью по прошествии K дней.
Входные данные: Во входном файле INPUT.TXT содержится натуральное число K – число дней (K <=1000).
Выходные данные: В выходной файл OUTPUT.TXT требуется вывести три латинских буквы: «G», «C» и «V» (заглавные буквы без пробелов), описывающие порядок цветов на окошке по истечении K дней (слева направо). Обозначения: G – герань, C – крокус, V – фиалка.
Программа данного алгоритма
var a:string;k:char;
i,n:integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(n);
a:=GCV;
for i:=1 to n do begin
k:=a[2]; a[2]:=a[3]; a[3]:=k;
k:=a[2]; a[2]:=a[1]; a[1]:=k; end;
write(a);
close(output);
end.
Задача №519 «Наименьшее и наибольшее числа из тех же цифр»
Постановка задачи
Требуется написать программу, которая найдет наименьшее и наибольшее числа, состоящие из тех же цифр, что и заданное натуральное число N.
Входные данные: Входной файл INPUT.TXT содержит натуральное число N (N <= 2*109).
Выходные данные: Выходной файл OUTPUT.TXT должен содержать в одной строке наименьшее, а через пробел – наибольшее числа.
Основные идеи решения
Считываем число как строку.
Упорядочиваем строку при помощи пузырьковой сортировки.
Записываем в обратном порядке в другую строку все элементы и получаем максимальное число
Избавляемся от ведущих нулей в исходном массиве и выводим его как минимальное
Программа данного алгоритма
var
x:char;
a,s:string;
i,j,k:integer;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(a);
for i:=1 to (length(a)-1) do begin
for j:=i+1 to length(a) do begin
if a[i]>a[j] then begin
x:=a[i]; a[i]:=a[j]; a[j]:=x;
end;
end;
end;
for i:=length(a) downto 1 do begin
s:=s+a[i]; end;
for i:=length(a) downto 1 do begin
if a[i]=0 then k:=k+1; end;
x:=a[1];
a[1]:=a[k+1];
a[k+1]:=x;
write(a, ,s);
end.
Задача №529 «Длина отрезка»
Постановка задачи
Отрезок задан координатами своих концевых точек. Требуется вычислить длину этого отрезка.
Входные данные: Входной файл INPUT.TXT содержит координаты концов отрезка в формате X1 Y1 X2 Y2 . Все координаты – целые числа, не превышающие 1000 по абсолютной величине.
Выходные данные: В выходной файл OUTPUT.TXT выведите длину отрезка с точностью 10-5.
Программа данного алгоритма
var s: real;
a,b,k,p: integer;
m: string;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(a,b,k,p);
s:=sqrt((a-k)*(a-k)+(b-p)*(b-p));
str(s:-1:5,m);
k:=0;
for a:=1 to length(m) do begin
if m[a]=. then break;
k:=k+1; end;
while (m[length(m)]=0) or (m[length(m)]=.) do begin
if (m[length(m)]=0) or (m[length(m)]=.) then delete(m,length(m),1);
if length(m)=k then break; end;
write(m);
end.
Задача №532 «Клавиатура - 2»
Постановка задачи
Всем известно, что со временем клавиатура изнашивается, и клавиши на ней начинают залипать. Конечно, некоторое время такую клавиатуру еще можно использовать, но для нажатий клавиш приходиться использовать большую силу.
При изготовлении клавиатуры изначально для каждой клавиши задается количество нажатий, которое она должна выдерживать. Если знать эти величины для используемой клавиатуры, то для определенной последовательности нажатых клавиш можно определить, какие клавиши в процессе их использования сломаются, а какие – нет.
Требуется написать программу, определяющую, какие клавиши сломаются в процессе заданного варианта эксплуатации клавиатуры.
Входные данные: Первая строка входного файла INPUT.TXT содержит целое число N (1 ≤ N ≤ 100) – количество клавиш на клавиатуре. Вторая строка содержит n целых чисел – с1, с2, … , сN, где сi (1 ≤ сi ≤ 100000) – количество нажатий, выдерживаемых i-ой клавишей. Третья строка содержит целое число K (1 ≤ K ≤ 100000) – общее количество нажатий клавиш, и последняя строка содержит K целых чисел pj (1 ≤ pj ≤ N) – последовательность нажатых клавиш.
Выходные данные: В выходной файл OUTPUT.TXT необходимо вывести N строк, содержащих информацию об исправности клавиш. Если i-ая клавиша сломалась, то i-ая строка должна содержать слово "yes" (без кавычек), если же клавиша работоспособна – слово "no".
Программа данного алгоритма
var n,k,i,j:integer;
a:array[1..100] of longint;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(n);
for i:=1 to n do read(a[i]);
readln(k);
for i:=1 to k do
begin
read(j);
dec(a[j]);
end;
for i:=1 to n do
if 0>a[i] then writeln(yes) else writeln(no);
end.
Задача №539 «Торт»
Постановка задачи
На свой день рождения Петя купил красивый и вкусный торт, который имел идеально круглую форму. Петя не знал, сколько гостей придет на его день рождения, поэтому вынужден был разработать алгоритм, согласно которому он сможет быстро разрезать торт на N равных частей. Следует учесть, что разрезы торта можно производить как по радиусу, так и по диаметру.
Помогите Пете решить эту задачу, определив наименьшее число разрезов торта по заданному числу гостей.
Входные данные: Входной файл INPUT.TXT содержит натуральное число N – число гостей, включая самого виновника торжества (N <= 1000).
Выходные данные: В выходной файл OUTPUT.TXT выведите минимально возможное число разрезов торта.
Программа данного алгоритма
var n:longint;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(n);
if n=1 then n:=0 else if n mod 2=0 then n:=n div 2 else n:=n;
write(n);
end.
Задача №580 «Поднос»
Постановка задачи
Школьная столовая хочет заказать новые треугольные подносы. Естественно, был организован тендер. Основным критерием отбора предложений является условие того, что имеющиеся в столовой круглые тарелки должны помещаться на новые подносы.
Директор школы дал вам задание написать программу, проверяющую, помещается ли тарелка данного размера на поднос с данными длинами сторон.
Входные данные: В первой строке входного файла INPUT.TXT находятся 3 целых положительных числа - длины сторон подноса. Гарантируется, что поднос с такими сторонами существует. Во второй строке входного файла содержится радиус тарелки - целое положительное число. Все числа во входном файле не превосходят 100. Радиус тарелки и стороны подноса указаны в одних и тех же единицах измерения.
Выходные данные: Выведите в выходной файл OUTPUT.TXT сообщение YES, если тарелка помещается на поднос, и NO - в противном случае.
Основные идеи решения
Считываем стороны треуг., затем радиус круга.
Вычисляем площадь треугольника по формуле Герона.
Сравниваем радиус с площадью треугольника, если он меньше, то выводим ‘YES’.
Программа данного алгоритма
var
a,b,c,z:integer;
s1:real;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
readln(a,b,c);
readln(z);
s1:=sqrt((((a+b+c)/2)-a)*(((a+b+c)/2)-b)*(((a+b+c)/2)-c)/((a+b+c)/2));
if s1>=z then write(YES) else write(NO);
end.
Задача №597 «Внеземные гости»
Постановка задачи
Недавно на поле фермера Джона были обнаружены следы приземления летающих тарелок. Об этом даже писала газета Mew Yorc Courier.
Поле фермера Джона имеет форму круга радиусом r1. По сообщениям журналистов были обнаружены два следа от летающих тарелок, имевшие форму кругов. Один из них имел радиус r2, второй - радиус r3. Также сообщается, что они находились внутри поля фермера Джона и не пересекались (при этом, они, возможно, касались друг друга и/или границы поля).
Поскольку журналисты часто склонны преувеличивать масштабы событий, необходимо написать программу, которая будет проверять, могли ли иметь место события, описанные в газете.
Входные данные: Входной файл INPUT.TXT содержит три целых положительных числа - r1, r2, r3 (1 ≤ r1, r2, r3 ≤ 109).
Выходные данные: В выходной файл OUTPUT.TXT выведите слово YES, если информация, опубликованная в газете, может соответствовать правде, и слово NO - иначе.
Программа данного алгоритма
var r1,r2,r3: longint;
begin
assign(input, input.txt); reset(input);
assign(output, output.txt); rewrite(output);
read(r1,r2,r3);
if r1>=r2+r3 then write(YES);
if r1<r2+r3 then write(NO);
end.
Задача №606 «Треугольник - 3»
Постановка задачи
Даны длины трех отрезков. Требуется проверить: могут ли они являться сторонами треугольника.
Входные данные: Входной файл INPUT.TXT содержит 3 натуральных числа X Y Z – длины заданных отрезков. Длины отрезков записаны в одной строке через пробел и не превышают 1000.
Выходные данные: В выходной файл OUTPUT.TXT выведите YES, если отрезки могут быть сторонами треугольника и NO в противном случае.
Программа данного алгоритма
var
a,b,c:integer;
begin
assign(input, input.txt);assign(output,output.txt);
read(a,b,c);
if a+b<c then write(NO) else
if a+c<b then write(NO) else
if c+b<a then write(NO) else write(YES);
end.
Задачи семестровые
I. Функция F(x) –
Основные идеи решения
Вводим число n .
Создаем два массива для х и у.
Создаем два динамических массива размерностью n+1 для узлов и для значений F(x).
В цикле заполняем массив значениями F(x).
Во внешнем цикле считываем x[j].
Во внутреннем цикле вычисляем значение y[j].
И выводим y[j] во внешнем цикле.
Программа данного алгоритма
#include<fstream>
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
double x[4];
double y[4];
int n,i,j;
cout<<"Enter n:"<<endl;
cin>>n;
double *func= new double[n+1];
double *x1= new double[n+1];
for(i=1; i<n+1; i++)
{ x1[i]=i;
func[i]=1/(1+x1[i]*x1[i])*sin(x1[i]*x1[i]+x1[i]+1);
}
for(j=1; j<4; j++)
{
cout<<"Enter x"<<j<<":"<<endl;
cin>>x[j];
for(i=1; i<n+1; i++)
{
if ((i<=x[j]) && (x[j]<i+1))
{
y[j]=(x[j]-x1[i]+1)/(x1[i]-x1[i]+1)*func[i]+(x[j]-x1[i])/(x1[i]+1-x1[i])*func[i+1];
break;
}
}
cout<<"y("<<j<<")="<<y[j]<<endl<<endl; }
return 0;
}
E_1=
E_2=
Основные идеи решения
Создаем функцию считывания 2 исходных матриц Х и Y
Создаем функцию f, которая находит строку матрицы с максимальной суммой элементов и выводит эту сумму.
Создаем E_1 и E_2, они получают элементы матрицы Xi+1 из матриц X и Y.
В цикле заполняем массив значениями F(x).
В мэйне считываем размерность матриц.
В цикле 5 раз применяем к матрице Х процедуру получения Xi+1, то есть
Выводим Х5
Программа данного алгоритма
#include<iostream>
#include<iomanip>
using namespace std;
void mread(int n, int m,int **x, int **y)
{
for (int i = 0; i < n; i++)
for (int j = 0; j < m ; j++)
cin >> x[i][j];
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> y[i][j];
}
int f(int n,int m,int **x)
{
int max = 0, sum = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
sum += x[i][j];
}
if (max < sum) { max = sum; }
sum = 0;
}
return abs(max);
}
void e1(int n, int m, int **x, int **y)
{
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (i <= j) { x[i][j] = x[i][j] + y[i][j]; };
if (i > j) { x[i] [j] = x[i][j] - y[i][j]; };
}
}
void e2(int n, int m, int **x, int **y)
{
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
if (x[i][j]<y[i][j]) { x[i][j] = x[i][j] - y[i][j]; };
if (x[i][j]>y[i][j]) { x[i][j] = y[i][j] - x[i][j]; };
}
}
int main()
{
int m, n;
cout << “Enter n:”;
cin >> n;
cout << “Enter m:”;
cin >> m;
int **x = new int*[n], **y = new int*[n];
for (int i = 0; i < n; i++)
{
x[i] = new int[m];
y[i] = new int[m];
}
сout << “Enter Matrices X & Y”<<endl;
mread(n, m, x, y);
e1(n, m, x, y);
for (int i = 0; i < 6; i++)
{
if (f(n, m, x) < f(n, m, y)) { e1(n, m, x,y); };
if (f(n, m, x) > f(n, m, y)) { e2(n, m, x,y); };
}
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++)
{
cout <<setw(3)<< x[i][j];
}cout<<endl;
};
return 0;
}
Самостоятельная работа
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
int task1(int a)
{
return ((a/100)*10 +a%10);
}
int summ11(int n)
{
int sum = 0, k = 1, elem = 0;
for (int i = 0; i < n; i++ )
{
elem = elem + k;
sum = sum + elem;
k = k * 10;
}
return sum;
}
int task9(int n)
{
int k=0;
while (n>0)
{
n=n/10; k++;
};
return(k);
}
int summ(char arr[])
{
int sum = 0, k = 1, j = 1, elem = 0;
for (int i = 0; i < strlen(arr); i++ )
{
sum += k*(arr[i] - 0);
k *= -1;
}
return sum;
}
int task17(int n, int k)
{
int s=0;
while (n!=0)
{if (n%10==k) s++; n=n/10;};
return(s);}
void task21(char arr[])
{
swap(arr[0], arr[strlen(arr)-1]);
}
int task25(int n, int m)
{
int k=0;int s=0;
while(k!=m)
{s=s+n%10; n=n/10; k++;};
return(s);
}
void task29()
{
for (int i = 1000; i < 9999; i++ )
{
int arr[10];
for (int j = 0; j < 10; j++) {
arr[j] = 0;
}
arr[i % 10]++;
arr[(i % 100) / 10]++;
arr[(i % 1000) / 100]++;
arr[i / 1000]++;
bool b = false;
for (int j = 0; j < 10; j++) {
if (arr[j] == 2)
{
b = true; break;
}
}
if (!b) cout << i << ;
}
}
void task33()
{
int x[123]; int p=0;
for (int i=0; i<122; i++) x[i]=0;
x[122]=1;
for (int i=0; i<123; i++)
{for (int j=122; j>-1; j--)
{x[j]=x[j]*7+p; p=x[j]/10; x[j]=x[j]%10; }}
int i=0; int j=0;
while (x[j]==0) {i++; j++;};
for(j=i;j<123;j++) {cout<<x[j];};
}
void task37(char a[])
{
int i, j;
int n = strlen(a) / 2;
while (n>0)
{
for (i = 0; i<strlen(a) - n; i++)
{
j = i;
while (j >= 0 && (a[j]-0)>(a[j + n]-0))
{
swap(a[j], a[j + n]);
j--;
}
}
n = n / 2;
}
for (int i = 0; i < strlen(n);i++)
if (n[i] != 0)
cout << n[i];
}
int task41(int n)
{
return(sumoflastnum(n,task9(n))+n);
}
int task45()
{
bool fl=false;int x[10]; int k=100000000;int l=k;int t=0;
while (!fl)
{for(int i=0; i<10; i++) x[i]=0;
for (int i=9; i>-1; i--) {x[i]=l%10; l=l/10;};
int m=task9(k);
for(int i=11-m; i<9; i++) if (2*x[i]<x[i-1]+x[i+1]) {t++;};
if (t+2==m) fl=true;
else {k--; l=k; t=0;};};
return(k);
}
int task49(int k)
{ int l=0;
int m=task9(k);int h=m;
int *x=new int[m];
for (int i=m-1; i>-1; i--){x[i]=k%10;k=k/10;}
int i=0;
while (h>1) {if (i>=m) i=i-m;
if (x[i]>-1) {if (l==0) {x[i]=-1; l=1; h--;} else l=0;};
i++; };
int r;
for (i=0;i<m;i++) if (x[i]!=-1) r=x[i];
return r;}
void task53()
{
cout<<"Task 53"<<endl;
cout<<"10101 in SS 10:"<<endl;
cout<<" in SS 2 - 10011101110101"<<endl;
cout<<" in SS 3 - 111212010"<<endl;
cout<<" in SS 4 - 2131311"<<endl;
cout<<" in SS 5 - 310401"<<endl;
cout<<" in SS 8 - 23565"<<endl;
cout<<" in SS 12 - 5A19"<<endl;
cout<<" in SS 16 - 2775"<<endl;
cout<<endl<<endl;
cout<<"Task 57"<<endl;
cout<<"100.001 in SS 2:"<<endl;
cout<<" in SS 8 - 4.1"<<endl;
cout<<" in SS 12 - 4.16"<<endl;
cout<<" in SS 16 - 4.2"<<endl;
cout<<"100.001 in SS 3:"<<endl;
cout<<" in SS 8 - 11.(275502)"<<endl;
cout<<" in SS 12 - 9.054"<<endl;
cout<<" in SS 16 - 9.(097B425ED)"<<endl;
cout<<"100.001 in SS 5:"<<endl;
cout<<" in SS 8 - 31.00406111..."<<endl;
cout<<" in SS 12 - 21.0119A7A5..."<<endl;
cout<<" in SS 16 - 19.020C49BA..."<<endl;
cout<<endl<<endl;
cout<<"Task 61"<<endl;
cout<<"16 in SS 17 = 17 in SS 16"<<endl;
cout<<"10011 in SS 2 = 14 in SS 15"<<endl;
}
int main(
{int a,k; char n[1000];
cout<<"Task 1"<<endl;
cout<<"a=";cin>>a;cout<<"b="<<task1(a)<<endl;
cout<<endl<<endl;
cout<<"Task 5"<<endl;
cout<<"n=";cin>>a;cout<<"sum=";sum11(a);cout<<endl;
cout<<endl<<endl;
cout<<"Task 9"<<endl;
cout<<"n=";cin>>a;cout<<"amountofdigits="<<task9(a)<<endl;
cout<<endl<<endl;
cout<<"Task 13"<<endl;
cout<<"n=";cin>>n;cout<<"sum="<<summ(n)<<endl;
cout<<endl<<endl;
cout<<"Task 17"<<endl;
cout<<"n=";cin>>a;cout<<"k=";cin>>k;cout<<"equal k: "<<task17(a,k)<<endl;
cout<<endl<<endl;
cout<<"Task 21"<<endl;
cout<<"n=";cin>>a;cout<<"b="<<task21(a)<<endl;
cout<<endl<<endl;
cout<<"Task 25"<<endl;
cout<<"n=";cin>>a;cout<<"m=";cin>>k;cout<<"sum="<<task25(a,k)<<endl;
cout<<endl<<endl;
cout<<"Task 29"<<endl;task29();cout<<endl<<endl;
cout<<"Task 33"<<endl;task33();cout<<endl<<endl;
cout<<"Task 37"<<endl;
cout<<task37()<<endl;
cout<<endl<<endl;
cout<<"Task 41"<<endl;
cout<<"n=";cin>>a;cout<<"Krekker number="<<task41(a)<<endl;
cout<<endl<<endl;
cout<<"Task 45"<<endl;
cout<<task45()<<endl;
cout<<endl<<endl;
cout<<"Task 49"<<endl;
cout<<"n=";cin>>a;cout<<"last digit="<<task49(a)<<endl;
cout<<endl<<endl;
task 53();
system("pause");
return 0;
}
Теория информационных процессов и систем
Курсовая работа по предмету «Программирование»