 
                                                 
                                                 
                                                Не сказала бы, что это решение сильно отличается от уже имеющегося, но
а) оно совсем немножко удобнее (хотя бы из-за ClrScr и вывода ответа с определённым количеством знаков после запятой). А ещё предусмотрена возможность отсутствия таковых чисел.
б)ну не могла я пропустить задачу по паскалю)
Program n1;
Uses CRT;
Const n=10;
Var a: array[1..n] of integer;
 i,s,k: integer;
begin
ClrScr;
Randomize;
For i:=1 to n do
 begin
 a[i]:=random(10);
 write(a[i]:3);
 If a[i]=i then
 begin
 s:=s+a[i];
 writeln('s=',s);
 k:=k+1;
 end;
 end;
writeln;
 If k=0 then writeln('таких элементов нет') else
Writeln('Среднее арифметическое элементов массива, равных своим индексам, равно ',s/k:4:4);
readln
end.
 
                                                Последняя цифра числа - остаток деления на N, где N - основание системы счисления. Соответственно, последние две цифры - остаток от деления на N^2.
12₄ = 1*4 + 2 = 6₁₀
Выходит, что нам нужно найти все десятичные числа, которые не превосходят 40 и при делении на 16 дают остаток 12.
Общий вид таких чисел: k*16 + 6. K - любое целое неотрицательное число. Теперь просто подставляем.
если k = 0, то получается число 5.
если k = 1, то получается число 22.
если k = 2, то получается число 38.
Очевидно, что дальше мы выйдем за границы нужного нам диапазона.
ответ: 5, 22, 38
 
                                                 
                                                 
                                                 
                                                 
                                                 
                                                
N,K,i:integer;
begin
write('Введите N: ');
readln(N);
write('Введите K: ');
readln(K);
for i:= 1 to N do write(K,' ');
end.