Примечание:
Если к числу в двоичной системе счисления приписывать в конец цифры, то число увеличивается и никак не может уменьшится. Поэтому, n<f(n). Следовательно, перебор различных чисел, принадлежащих отрезку [90;160], можно смело ставить до 160 (можно и меньше, но лень расписывать вычисления).
ToBinary - функция перевода числа из десятичной СС в двоичную. Можно писать любой алгоритм, необязательно в точности использовать мой.
FromBinary - функция перевода числа из двоичной СС в десятичную. Можно писать любой алгоритм, необязательно в точности использовать мой.
func - функция, которая выполняет преобразования числа согласно условию (пункты 1, 2, 3, 4).
Код кажется большим только из-за процедур и begin/endов. Без них - всего то 7 строчек :). В скринах можно проверить, действительно ли 19 (40-22+1).
Пример работы:
var a,n,k,i,j,s:integer;
begin
writeln('Количество учеников и количество оценок');
readln(n,k);
for i:=1 to n do begin
for j:=1 to k do begin
write('Ученик № ',i, ' оценка № ',j,' = ');
readln(a);
s:=s+a;
end;
end;
println('Средняя оценка группы ',s/(n*k):6:3);
end.
Тестовое решение:
Количество учеников и количество оценок
3 3
Ученик № 1 оценка № 1 = 3
Ученик № 1 оценка № 2 = 4
Ученик № 1 оценка № 3 = 4
Ученик № 2 оценка № 1 = 5
Ученик № 2 оценка № 2 = 4
Ученик № 2 оценка № 3 = 4
Ученик № 3 оценка № 1 = 4
Ученик № 3 оценка № 2 = 3
Ученик № 3 оценка № 3 = 3
Средняя оценка группы 3.778