Обозначим Б - число быков, К - число коров, Т - число телят. Тогда можно записать, что Б+К+Т=100 (1) 10Б+5К+0.5Т=100 (2) Из (2) найдем ограничения на количества Б, К, и Т. Б ∈ [0;10], К ∈ [0;20]. Из (1) находим, что Т=100-Б-К, Т - четное (иначе сумма не будет целой). Эти ограничения позволят правильно построить циклы в программе.
PascalABC.NET 3.3.5, сборка 1662 от 29.04.2018 Внимание! Если программа не работает, обновите версию!
begin for var Б:=0 to 10 do for var K:=0 to 20 do begin var T:=100-Б-K; // из уравнения (1) if T.IsEven and (10*Б+5*K+T div 2=100) then Writeln(Б,'Б, ',K,'K, ',T,'T') end end.
На вход подается 2 числа: a,b где 2^a + 2^(a+1) + 2^(a+2) + ... 2^(b-2) + 2^(b-1) + 2^b
На выводе число - результат формулы выше при подстановке a и b
1 вариант через цикл, сложность O(n):
VAR a, b, adder, sum, i: INTEGER; BEGIN READ(a, b); adder := 1; FOR i := 1 TO b DO BEGIN adder := 2 * adder; IF (i >= a) THEN sum := sum + adder END; WRITELN(sum); END.
2 вариант через побитовые сдвиги, сложность O(1):
VAR a, b: INTEGER; BEGIN READ(a, b); WRITELN((1 SHL (b+1)) - (1 SHL (a))); END.
Тогда можно записать, что
Б+К+Т=100 (1)
10Б+5К+0.5Т=100 (2)
Из (2) найдем ограничения на количества Б, К, и Т.
Б ∈ [0;10], К ∈ [0;20].
Из (1) находим, что Т=100-Б-К, Т - четное (иначе сумма не будет целой).
Эти ограничения позволят правильно построить циклы в программе.
PascalABC.NET 3.3.5, сборка 1662 от 29.04.2018
Внимание! Если программа не работает, обновите версию!
begin
for var Б:=0 to 10 do
for var K:=0 to 20 do begin
var T:=100-Б-K; // из уравнения (1)
if T.IsEven and (10*Б+5*K+T div 2=100) then
Writeln(Б,'Б, ',K,'K, ',T,'T')
end
end.
Результат
1Б, 9K, 90T
На вход подается 2 числа: a,b где
2^a + 2^(a+1) + 2^(a+2) + ... 2^(b-2) + 2^(b-1) + 2^b
На выводе число - результат формулы выше при подстановке a и b
1 вариант через цикл, сложность O(n):
VAR
a, b, adder, sum, i: INTEGER;
BEGIN
READ(a, b);
adder := 1;
FOR i := 1 TO b DO
BEGIN
adder := 2 * adder;
IF (i >= a)
THEN
sum := sum + adder
END;
WRITELN(sum);
END.
2 вариант через побитовые сдвиги, сложность O(1):
VAR a, b: INTEGER;
BEGIN
READ(a, b);
WRITELN((1 SHL (b+1)) - (1 SHL (a)));
END.