Дописываем немного код для перебора и проверяем вывод
var
x, a, b, t: longint;
begin
for t := -1000 to 1000 do
begin
x := t;
a := 0;
b := 1;
while x > 0 do
begin
if x mod 2 > 0 then
a := a + x mod 8
else
b := b * (x mod 8);
x := x div 8;
end;
if (a = 2) and (b = 12) then
writeln(t);
end;
end.
Вывод 598
626
654
689
906
913
т.е. минимальное число 598
Аналитическое решение:
имеем дело с 8ричным числом. Перебираем его цифры.
Если цифра нечетная то сумируем ее к А, а четные перемножаем с В
В = 12 это произведение 12 = 2*6 = 3*4 = 1*12, но нужно чтоб все числа были четные потому 2*6
А = 2. 2 = 2 = 1+1 , поскольку числа нечетные, то 2 = 1+1
Значит у нас есть 4 8ричные цифры 2,6,1,1
Минимальное число которое может из них получиться 1126(8) = 598(10)
1) 1,357е+5 меньше, чем 1357е+1
2)137,12е+5 больше, чем 1,3711е+7
3)153,79е-3 больше, чем 1,5379
<em>// PascalABC.NET 3.3, сборка 1599 от 17.12.2017</em>
<em>// Внимание! Если программа не работает, обновите версию!</em>
function sn(n:integer):integer; // сумма цифр числа
begin
n:=Abs(n);
Result:=0;
while n>0 do begin
Result+=n mod 10;
n:=n div 10
end
end;
begin
var (n,a,b):=ReadInteger3('Введите n,a,b через пробел:');
var m:=ArrRandom(n,a,b); m.Println;
var k:=ReadInteger('k=');
Writeln('Найдено чисел: ',m.Where(t->sn(t)=k).Count)
end.
<u>Пример</u>
Введите n,a,b через пробел: 15 -50 60
43 2 42 -26 -34 57 45 44 29 -41 -4 1 -17 38 -19
k= 7
Найдено чисел: 2
Const n=10;
var a:array[1..n] of integer;
i,c:integer;
begin
Randomize;
for i:=1 to n do begin
a[i]:=random(51);
write(a[i],' ');
end;
writeln;
c:=a[n];
for i:=n downto 2 do a[i]:=a[i-1];
a[1]:=c;
for i:=1 to n do write(a[i],' ');
writeln;
end.
Пример:
8 2 24 20 27 44 25 41 16 21
21 8 2 24 20 27 44 25 41 16