// PascalABC.NET 3.0, сборка 1128 function Sum(a:array of real):real; begin Result:=0; foreach var x in a do if x>10 then Result+=x end;
procedure Half(a:array of real); begin var s:=Sum(a)/2; for var i:=0 to a.Length-1 do a[i]/=s end;
procedure PrintRealArray(a:array of real); begin foreach var x in a do Write(x:0:3,' '); Writeln end;
begin var n:=ReadInteger('Количество элементов массива:'); var P:=ArrRandomReal(n,0,20); Writeln('Исходный массив'); PrintRealArray(P); Half(P); Writeln('Результирующий массив'); PrintRealArray(P) end.
972₁₀ = 1111001100₂ Минимальное число должно содержать минимальное количество значащих цифр, следовательно нужно найти такие варианты циклического сдвига, когда результат будет начинаться с максимально возможного количества нулей. Сдвиг влево на 4 даст 0011001111, сдвиг еще на 4 даст 0011110011. Запишем оба числа-"претендента" друг под другом и будем поразрядно их сравнивать в направлении слева направо. Меньшим из чисел будет то, в котором при несовпадении разрядов встретится ноль. 0011001111 - меньшее 0011110011 0011001111₂ = 207₁₀