Проводят лотерею при которой внимают вынимают из барабана один мяч из 32 какое минимальное количество бит потребуется чтобы закодировать сообщения о результатах лотереи?
Begin S:=0; Repeat Read(A); if (A mod 2 <> 0)and(A mod 7 = 0) then S:=S+A; Until A = 0; WriteLn('S = ',S); End.
Теперь объяснение каждой строки:
Var S:longint; i:integer; A:byte; // В эту переменную будет вводится число с клавиатуры. Тип Byte может принимать значения от 0 до 255. Поэтому его как раз хватит.
Begin S:=0; // Тут будет храниться сумма, поэтому переменную следует сперва обнулить.
Repeat // далее начинается цикл Read(A); // эта команда каждый раз считывает с клавы число, и записывает его в переменную A.
if (A mod 2 <> 0)and(A mod 7 = 0) then S:=S+A; //тут проверяется 2 условия, и если они выполняются - к переменной S прибавляется значение переменной А 1 условие: число нечётно, то есть остаток от деления его на 2 не равен нулю (A mod 2 <>0) 2 условие: Число кратно 7, то есть делится без остатка на 7, то есть остаток от деления равен нулю (A mod 7 = 0)
Until A = 0; // Цикл повторяется до тех пор, пока введённое с клавы число не будет равно нулю (A = 0)
WriteLn('S = ',S); // Тут выводится искомая сумма End.
14 и 35 делятся на 7, поэтому можно получить только количества воды, кратные 7 л. Максимальное возможное число литров в двух сосудах равно 14 + 35 = 49, поэтому можно пробовать получить 0 л, 7 л, 14 л, 21 л, 28 л, 35 л, 42 л, 49 л.
0 л, 14 л, 35 л, 49 л - очевидно, получаются, это ни одного заполненного бака, заполненный бак на 14, заполненный бак на 35, оба заполненных бака.
21 л: заполнить бак на 35, отлить 14 в меньший бак, вылить воду из меньшего бака. 7 л: налить 21 л в больший бак (мы это уже умеем), отлить 14 в меньший бак, вылить воду из меньшего бака. 28 л: наполнить меньший бак, вылить из меньшего бака в больший, заполнить меньший бак. 42 л: налить 7 л в больший бак, перелить в меньший бак, заполнить больший бак.
Итого, можно получить 0 л, 7 л, 14 л, 21 л, 28 л, 35 л, 42 л, 49 л.
Var
S:longint;
i:integer;
A:byte;
Begin
S:=0;
Repeat
Read(A);
if (A mod 2 <> 0)and(A mod 7 = 0) then S:=S+A;
Until A = 0;
WriteLn('S = ',S);
End.
Теперь объяснение каждой строки:
Var
S:longint;
i:integer;
A:byte; // В эту переменную будет вводится число с клавиатуры. Тип Byte может принимать значения от 0 до 255. Поэтому его как раз хватит.
Begin
S:=0; // Тут будет храниться сумма, поэтому переменную следует сперва обнулить.
Repeat // далее начинается цикл
Read(A); // эта команда каждый раз считывает с клавы число, и записывает его в переменную A.
if (A mod 2 <> 0)and(A mod 7 = 0) then S:=S+A; //тут проверяется 2 условия, и если они выполняются - к переменной S прибавляется значение переменной А
1 условие: число нечётно, то есть остаток от деления его на 2 не равен нулю (A mod 2 <>0)
2 условие: Число кратно 7, то есть делится без остатка на 7, то есть остаток от деления равен нулю (A mod 7 = 0)
Until A = 0; // Цикл повторяется до тех пор, пока введённое с клавы число не будет равно нулю (A = 0)
WriteLn('S = ',S); // Тут выводится искомая сумма
End.
0 л, 14 л, 35 л, 49 л - очевидно, получаются, это ни одного заполненного бака, заполненный бак на 14, заполненный бак на 35, оба заполненных бака.
21 л: заполнить бак на 35, отлить 14 в меньший бак, вылить воду из меньшего бака.
7 л: налить 21 л в больший бак (мы это уже умеем), отлить 14 в меньший бак, вылить воду из меньшего бака.
28 л: наполнить меньший бак, вылить из меньшего бака в больший, заполнить меньший бак.
42 л: налить 7 л в больший бак, перелить в меньший бак, заполнить больший бак.
Итого, можно получить 0 л, 7 л, 14 л, 21 л, 28 л, 35 л, 42 л, 49 л.