Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
begin
assign(f1,'input. txt'); reset(f1);
assign(f2,'output. txt'); rewrite(f2);
readln(f1,n); ss:=0;
for i:=1 to n do
for j:=1 to n do
begin read(f1,s); ss:=ss+s; a[i, j]:=s end;
for i:=0 to n do p[i]:=i;
max:=0;
repeat
m:=0; for i:=1 to n do m:=m+a[i, p[i]];
if m>max then begin max:=m; pmax:=p end;
j:=n; repeat j:=j-1 until p[j]<p[j+1];
if j>0 then
begin
i:=n+1; repeat i:=i-1 until p[i]>p[j];
s:=p[i]; p[i]:=p[j]; p[j]:=s;
for i:=j+1 to (n+j+1) div 2 do
begin s:=p[i]; p[i]:=p[n+j+1-i]; p[n+j+1-i]:=s end
end
until j=0;
for i:=1 to n do write(f2,chr(pmax[i]-1+ord('A')));
writeln(f2);
write(f2,ss-max);
close(f2)
end.
По условию задачи количество бутылок в контейнере не превышает 32767, но общее количество перемещений может превысить эту цифру. Поэтому в программе переменные, которые используются для суммирования, объявлены с двойной точностью.
Задача 8. "Шахматная" (20 баллов)
На шахматной доске стоит ферзь и конь. Расположение каждой фигуры задано ее координатами в шахматных обозначениях.
Требуется написать программу, которая определяет количество полей, которые находятся под боем этих фигур.
Технические требования:
Входной файл: INPUT. TXT.
Выходной файл: OUTPUT. TXT.
Ограничение по времени тестирования: 1 секунда на один тест.
Формат входных данных:
Входной файл INPUT. TXT состоит из 2-х строк. В первой строке записаны координаты ферзя, во второй - коня.
Формат выходных данных:
Выходной файл OUTPUT. TXT должен состоять из одной строки, в которой записано найденное количество полей.
Пример файла входных данных:
a1
h8
Пример файла выходных данных (для приведенного выше входного файла):
22
Разбор задачи № 8
В приведенной ниже программе в двумерном массиве сначала помечаются единицей все поля, которые находятся под боем ферзя, а затем - коня. А далее метятся нулем те поля, которые не может атаковать ферзь из-за того, что они закрыты конем. Границы массива специально расширены, чтобы не проверять выход за границы массива.
var
f, k, s : string;
a : array [-1..10,-5..14] of byte;
b : array [1..2,1..8] of integer;
i, j, ife, jfe, ik, jk, ch : integer;
f1, f2 : text;
begin
assign(f1,'input. txt'); reset(f1);
assign(f2,'output. txt'); rewrite(f2);
s:='abcdefgh';
b[1,1]:= 1; b[2,1]:= 2;
b[1,2]:= 1; b[2,2]:=-2;
b[1,3]:= 2; b[2,3]:= 1;
b[1,4]:= 2; b[2,4]:=-1;
b[1,5]:=-2; b[2,5]:= 1;
b[1,6]:=-2; b[2,6]:=-1;
b[1,7]:=-1; b[2,7]:= 2;
b[1,8]:=-1; b[2,8]:=-2;
readln(f1,f); readln(f1,k);
jfe:=pos(f[1],s); ife:=ord(f[2])-48;
jk:=pos(k[1],s); ik:=ord(k[2])-48;
for i:=1 to 8 do
for j:=1 to 8 do a[i, j]:=0;
for i:=1 to 8 do
for j:=1 to 8 do
begin
if (i=ife) then a[i, j]:=1;
if (j=jfe) then a[i, j]:=1;
if ( i-j=ife-jfe ) then a[i, j]:=1;
if ( i+j=ife+jfe ) then a[i, j]:=1;
end;
for i:=1 to 8 do
a[ik+b[1,i], jk+b[2,i]]:=1;
a[ife, jfe]:=0; a[ik, jk]:=0;
if ife=ik then
if jfe<jk then for j:=jk+1 to 8 do a[ife, j]:=0
else for j:=1 to jk-1 do a[ife, j]:=0;
if jfe=jk then
if ife<ik then for i:=ik+1 to 8 do a[i, jfe]:=0
else for i:=1 to ik-1 do a[i, jfe]:=0;
if ife-jfe=ik-jk then
if ife<ik then for i:=ik+1 to 8 do a[i, i-ik+jk]:=0
else for i:=1 to ik-1 do a[i, jk+i-ik]:=0;
if ife+jfe=ik+jk then
if ife<ik then for i:=ik+1 to 8 do a[i, jk+ik-i]:=0
else for i:=1 to ik-1 do a[i, jk-i+ik]:=0;
ch:=0;
for i:=1 to 8 do
for j:=1 to 8 do ch:=ch+a[i, j];
{Печать поля для проверки
for i:=8 downto 1 do
begin
write(i,' ');
for j:=1 to 8 do
if (i=ife) and (j=jfe) then write('Ф') else
if (i=ik) and (j=jk) then write('К') else
if a[i, j]=1 then write('+') else write(' ');
writeln
end;
writeln(' abcdefgh');
}
writeln(f2,ch); close(f2)
end.
Задача 9. "Фибоначчиева система счисления" (20 баллов)
Числа Фибоначчи U1, U2, … определяются начальными значениями и соотношением:
U1=1; U2=2; Un=Un-1+Un-2.
Рассмотрим систему счисления с двумя цифрами 0 и 1, в которой, в отличие от двоичной системы, весами являются не степени двойки 1, 2, 4, 8, 16, …, а числа Фибоначчи 1, 2, 3, 5, 8, 13, …. В этой системе счисления каждое положительное целое число единственном способом представляется в виде строки из нулей и единиц, которая начинается с 1 и в которой нет двух единиц, стоящих рядом.
Требуется написать программу, которая по двум заданным строкам, представляющим числа A и B в фибоначчиевой системе счисления, находила строку, представляющую число A+B также в этой системе счисления.
Например, исходные строки 10101 и 100 представляют числа 1*8+0*5+1*3+0*2+1*1=8+3+1=12 и 1*3+0*2+0*1=3. Ответом является строка 100010, представляющая число 1*13+0*8+0*5+0*3+1*2+0*1=13+2=15=12+3.
Технические требования:
Входной файл: INPUT. TXT
Выходной файл: OUTPUT. TXT
Ограничение по времени тестирования: 3 секунды на один тест.
Технические ограничения: строки могут быть столь длинны, что числа A и B превысят максимально допустимое в вашем компьютере целое число. Длина записи чисел A, B и их суммы A+B в фибоначчиевой системе счисления не превышает 255 знаков.
Формат входных данных:
В текстовом файле INPUT. TXT в первой строке записано первое число, а во второй - второе.
Формат выходных данных:
Вывести в текстовый файл OUTPUT. TXT полученную сумму.
Пример файла входных данных:
10101
100
Пример файла выходных данных (для приведенного выше входного файла):
100010
Разбор задачи № 9
Одним из способов решения задачи является перевод заданных чисел в фибоначчиевой системе счисления в десятичные числа, после этого производится сложение и результат опять преобразуется в фибоначчиеву систему счисления. В предложенной ниже программе используется алгоритм сложения в фибоначчиевой системе счисления. Точнее, это делается следующим образом. В начале производится сложение по разрядам, а затем, если в записи стоят две единицы рядом, то из соотношения fi=fi-1+fi-2 они заменяются на одну единицу в старшем разряде. Если же в каком-то разряде получается 2, то она заменятся на единицы из соотношений 2f1=f2, 2f2=f3+f1, 2fi=fi+1+fi-2.
Var b, c, d : string;
a : array [1..255] of byte;
i, k, m : integer;
f1, f2 : text;
begin
assign(f1,'input. txt'); reset(f1);
readln(f1,b); readln(f1,c);
if length(b)<length(c) then
begin d:=b; b:=c; c:=d end;
for i:=1 to length(b)-length(c) do c:='0'+c;
m:=length(b);
for i:=1 to 255 do a[i]:=0;
for i:=1 to m do
a[i]:=ord(b[m+1-i])+ord(c[m+1-i])-96;
k:=1;
repeat
if k=1 then
begin
if a[1]>1 then
begin
a[1]:=0; if m<2 then m:=2; a[2]:=a[2]+1
end;
k:=k+1
end;
if k=2 then
begin
if a[2]<2 then
begin
if (a[2]=1) and (a[1]=1) then
begin
a[1]:=0; a[2]:=0; if m<3 then m:=3; a[3]:=a[3]+1
end;
k:=k+1
end
else
begin
if m<3 then m:=3; a[3]:=a[3]+1;
if a[1]=0 then
begin
a[1]:=a[1]+1; a[2]:=a[2]-2; k:=1
end
else
begin
a[1]:=0; a[2]:=a[2]-1;
end
end
end;
if k>2 then
if a[k]<2 then
begin
if (a[k-1]=1) and (a[k]=1) then
begin
a[k-1]:=0; a[k]:=0; if k+1>m then m:=k+1; a[k+1]:=a[k+1]+1
end;
k:=k+1
end
else
begin
if k+1>m then m:=k+1; a[k+1]:=a[k+1]+1;
if a[k-1]=0 then
begin
a[k-2]:=a[k-2]+1; a[k]:=a[k]-2; k:=k-2
end
else
begin
a[k-1]:=0; a[k]:=a[k]-1
end
end
until k>m;
assign(f2,'output. txt'); rewrite(f2);
for i:=m downto 1 do write(f2,a[i]); close(f2)
end.
Задача A. "Оставшееся число" (20 баллов)
Задан ряд последовательных натуральных чисел от n до m (n<m), из которого удаляют сначала все числа, стоящие на нечетных местах. Затем из оставшегося ряда удаляют все числа, стоящие в нем на четных местах. Эти действия повторяют до тех пор, пока не останется одно число.
Требуется написать программу, которая находит оставшееся число.
Технические требования:
Входной файл: INPUT. TXT
Выходной файл: OUTPUT. TXT
Ограничение по времени тестирования: 1 секунда на один тест.
Формат входных данных:
В текстовом файле INPUT. TXT в первой строке записано первое число n, а во второй – второе m (n<m<1000000000).
Формат выходных данных:
Вывести в текстовый файл OUTPUT. TXT оставшееся число.
Пример файла входных данных:
1 4
Пример файла выходных данных (для приведенного выше входного файла):
2
Разбор задачи № A
Каждое вычеркивание уменьшает длину последовательности в почти два раза. Вычитание из каждого элемента последовательности числа n-1 сводит исходную задачу к последовательности 1, 2, …, m-n+1, в которой на i-м месте стоит число i. А теперь проследим сделанные вычеркивания для этой последовательности с конца. Когда после всех вычеркиваний остается один элемент, то его номер равен k=1. Этот номер получается или из номера k=2*k, если вычеркиваются числа, стоящие на нечетных местах, или из номера k=2*k-1, если вычеркиваются числа, стоящие на четных местах. В результате мы можем узнать с какого места в исходной последовательности 1, 2, …, m-n+1, получилось после всех вычеркиваний оставшееся число. А теперь, добавив к нему n-1, получаем оставшееся число из исходной последовательности.
var n, m, k, n1 : longint;
begin
assign(input,'input. txt'); reset(input);
readln(n, m);
n1:=m-n+1;
k:=1;
while n1>1 do
begin
n1:=n1 div 2;
if n1>1 then n1:=(n1+1) div 2;
k:=2*(2*k-1)
end;
assign(output,'output. txt'); rewrite(output);
write(n-1+k)
end.
Задача B. " Умножение дроби" (20 баллов)
Задана некоторая правильная периодическая дробь Q и натуральное число N. Q и N таковы, что количество цифр, используемых для их записи, не превосходит 100. При изображении дроби Q периодическая часть заключается в круглые скобки.
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 |


