Олимпиадная задача информатика Задание 10.
Для простейшего кодирования числовой информации решили использовать побитовую логическую функцию XOR (исключающее ИЛИ) между исходным сообщением и двоичным ключом Ключ нмеет длину, меньшую сообщения, поэтому может применяться циклически несколько раз. начиная отсчет от младшего бита.
СООБЩЕНИЕ XOR (КЛЮЧ)n раз = ШИФРОВКА
Вся информация (и шифровка, и сообщение) используется в шестнадцатеричном виде. Определите двоичный ключ, которым было зашифровано СООБЩЕНИЕ=FB17405А2 (в 16-ой системе счисления) если
получили следующий код ШИФРОВКИ - 484EEC8C4(в 16-ой системе счисления) Функция ХОR даем на выходе истинное значение, если на входе заданы противоположные
аргументы, и ложное значение, если аргументы на входе совпадают. Функция XOR - взаимообратная что используется при шифровании В ответе укажите двоичный код ключа
n = int(input()) # получаем кол-во продуктов и записываем в n
a = {} # библиотека для цен
c = {} # библиотека для кол-во продукта
l = [] # массив для всех проданных продуктов
for i1 in range(n): # цикл для заполнения всех массивов
b = [] # массив b для отделения цены о названия продукта
b.append(input().split()) # записываем продукт и его цену в массив b
k = int(b[0][len(b[0])-1]) # записываем в k цену продукта
v = ''
for i in range(len(b[0])-1): # при цикла объединяем название в одну строчку и записываем в v
v = v + str(b[0][i]) + ' '
l.append(v) # добавляем название в массив l
a[v] = k # добавляем цену и продукт в библиотеку a
c[v] = 0 # добавляем продукт в библиотеку b
for i in range(len(l)): # записываем при цикла кол-во каждого продукта
c[l[i]] = c[l[i]]+1
print(len(c)) # выводим кол-во продуктов, которые были проданы
for i in a: # при цикла выводим продукт и сколько за него в итоге заплатили
print(str(i)+str(a[i]*c[i]))
Объяснение
const n=10;
var
min,i: integer;
a: array[1..n] of integer;
begin
randomize;
min:=11;
for i:=1 to n do begin
a[i]:=random(1,10);
write (a[i],' '); // для наглядности. можно удалить
if (i mod 2 =1) and (a[i]<min)
then min:=a[i];
end;
writeln;
writeln ('min = ',min)
end.
Пример:
5 4 7 8 6 2 10 4 9 9
min = 5
2 задача:
const n=10;
var
max,count,i: integer;
a: array[1..n] of integer;
begin
randomize;
max:=0;
count:=0;
for i:=1 to n do begin
a[i]:=random(1,10);
write (a[i],' '); // для наглядности. можно удалить
if a[i]>max
then max:=a[i];
end;
for i:=1 to n do
if max=a[i] then count:=count+1;
writeln;
writeln ('max = ',max);
writeln ('count = ',count);
end.
Пример:
8 5 3 2 2 10 10 9 3 10
max = 10
count = 3