ответ:Вариант №1 (не совсем удачный, как было отмечено в комментариях).
//PascalABC.NET (версия 3.1, сборка 1210 от 29.03.2016)
var n,i,m:integer;
flag:boolean;
begin
readln(n);
flag:=false;
if (n mod 2<>0)then i:=n-1 else i:=n;
while i>0 do begin
if power(2,i)<=n then begin
write(power(2,i),' '); flag:=true;
end;
i:=i-2;
end;
if not flag then writeln(0);
end.
Тест №1
1025
1024 256 64 16 4
Тест №2
1
0
Вариант №2
var a,i,n: integer;
begin
a:=1;readln(n);
i:=trunc(log2(n)); //получим степень двойки для n
//если i нечетное,
//то первое искомое число получаем путем сдвига влево на i-1 в
//двоичном представлении числа иначе сдвиг на i
if (i mod 2)=1 then a:=a shl(i-1) else a:=a shl i;
//далее получаем числа сдвигая вправо на 2 разряда
//в двоичном представлении числа
while a>=2 do begin
write(a,' ');
a:=a shr 2;
end;
end.
Тестовое решение:
2147483647
1073741824 268435456 67108864 16777216 4194304 1048576 262144 65536 16384 4096 1024 256 64 16 4
ответ: 28
Объяснение:
Заданный фрагмента программы выполняет следующую задачу:
Цикл для i от 1 до 9, в котором если остаток от деления (А[i] + A[0]) на 4 неравен 0, (т. е. сумма А[i] и A[0] не делится на 4), то их (А[i] и A[0]) меняют местами, а переменную S увеличивают на i. Выполним алгоритм вручную:
6, 2, 3, 1, 5, 6, 7, 8, 9, 3; i=1; (6+2)%4 = 8%4 = 0; 6, 2, 3, 1, 5, 6, 7, 8, 9, 3; i=2; (6+3)%4 = 9%4 = 1; --> S =0+2= 23, 2, 6, 1, 5, 6, 7, 8, 9, 3; i=3; (3+1)%4 = 4%4 = 0; 3, 2, 6, 1, 5, 6, 7, 8, 9, 3; i=4; (3+5)%4 = 8%4 = 0; 3, 2, 6, 1, 5, 6, 7, 8, 9, 3; i=5; (3+6)%4 = 9%4 = 1; --> S =2+5= 76, 2, 6, 1, 5, 3, 7, 8, 9, 3; i=6; (6+7)%4 = 13%4 = 1; --> S =7+6= 137, 2, 6, 1, 5, 3, 6, 8, 9, 3; i=7; (7+8)%4 = 15%4 = 3; --> S =13+7= 208, 2, 6, 1, 5, 3, 6, 7, 9, 3; i=8; (8+9)%4 = 17%4 = 1; --> S =20+8= 289, 2, 6, 1, 5, 3, 6, 7, 8, 3; i=9; (9+3)%4 = 12%4 = 0;Как можно увидеть, после выполнения фрагмента программы переменная S будет равна 28.
Пример работы: