C++; Pascal; Java;Python Серик и Берик собрали все яблоки в саду. Однако, сезон яблок...

0 голосов
87 просмотров

C++; Pascal; Java;Python
Серик и Берик собрали все яблоки в саду. Однако, сезон яблок подходит к концу и в саду осталось очень мало яблок. Вместе они собрали всего N корзинок с яблоками. По этой причине, ребята решают поделить все собранные яблоки. Однако, Серику не понравилось предложение Берика поделить все количество яблок поровну. В этом случае кому-то может достаться больший вес яблок, так как, у каждого яблока разный вес. Серик предложил поделить яблоки, в каждой корзинке, с помощью монетки.

Берик и Серик выложили яблоки из каждой корзинки перед собой в ряд. Таким образом, получилось N рядов с корзинками. Для каждого ряда, ребята поочередно бросают монетку: если монетка падает решкой, то бросивший ее мальчик берет первое яблоко в ряду. Если выпадает орел, то берут последнее яблоко в ряду.

Каков будет общий вес яблок из каждой который наберет Серик, если он бросает монетку первым?


Информатика (15 баллов) | 87 просмотров
Дан 1 ответ
0 голосов
Правильный ответ
PascalABC.NET 3.3.5, сборка 1662 от 29.04.2018
Внимание! Если программа не работает, обновите версию!

type
  Монетка=(Орел,Решетка);
  КорзинаЯблок = List;
    
function БросокМонетки:=Random(2)=1 ? Орел : Решетка;

function ЗаполнитьКорзину(d:char):КорзинаЯблок;
// считаем, что яблоко весит от 100 до 250 г,
// и что в корзину вмещается около 8 кг яблок.
begin
  Result:=new КорзинаЯблок;
  var ВесЯблок:=0;
  while ВесЯблок<=8000 do begin<br>    var Яблоко:=Random(100,250);
    Result.Add(Яблоко);
    ВесЯблок+=Яблоко
    end;
  if d='1' then begin
    Write('Яблоки в корзине: ');
    Result.Println
    end;
end;

procedure ВзятьЯблоко(Корзина:КорзинаЯблок; var Яблоко:integer);
begin
  if БросокМонетки=Орел then begin
    Яблоко:=Корзина.Last;
    Корзина.RemoveAt(Корзина.Count-1)
    end
  else begin
    Яблоко:=Корзина.First;
    Корзина.RemoveAt(0)
    end
end;

procedure ЯблокоМальчику(Корзина,ЯблокиМальчика:КорзинаЯблок);
begin
  var Яблоко:integer;
  if Корзина.Count>0 then begin
    ВзятьЯблоко(Корзина,Яблоко);
    ЯблокиМальчика.Add(Яблоко)
    end
end;

begin
  Randomize;
  var ЯблокиСерика:=new КорзинаЯблок;
  var ЯблокиБерика:=new КорзинаЯблок;
  var n:=ReadlnInteger('Собрано корзин:');
  var d:=ReadlnChar('1 - отладочный вывод, иное - только результат:');
  loop n do begin
    var Корзина:=ЗаполнитьКорзину(d);
    while Корзина.Count>0 do begin
      ЯблокоМальчику(Корзина,ЯблокиСерика);
      ЯблокоМальчику(Корзина,ЯблокиБерика);
      end;
    if d='1' then begin
      Write('Яблоки Серика: ');
      ЯблокиСерика.Print; Writeln(' Вес: ',ЯблокиСерика.Sum);
      Write('Яблоки Берика: ');
      ЯблокиБерика.Print; Writeln(' Вес: ',ЯблокиБерика.Sum)
      end
    end;
  Writeln('Общий вес яблок Серика: ',ЯблокиСерика.Sum,
      ', общий вес яблок Берика: ',ЯблокиБерика.Sum)
end.

Пример без отладочной выдачи
Собрано корзин: 5
1 - отладочный вывод, иное - только результат: 0
Общий вес яблок Серика: 20399, общий вес яблок Берика: 19977

Пример с отладочной выдачей
Собрано корзин: 3
1 - отладочный вывод, иное - только результат: 1
Яблоки в корзине: 242 163 173 244 236 199 206 189 166 117 147 211 219 221 241 192 177 130 165 198 156 224 107 198 131 184 142 155 125 166 145 221 231 238 195 210 180 236 210 124 247 159 236
Яблоки Серика: 242 236 173 247 124 199 206 180 166 147 219 238 221 241 145 130 125 142 165 198 156 107 Вес: 4007
Яблоки Берика: 163 159 244 236 210 236 189 210 117 211 195 231 221 192 177 166 155 184 131 198 224 Вес: 4049
Яблоки в корзине: 132 176 119 177 154 204 123 158 217 196 245 235 181 183 237 104 107 127 194 185 158 147 203 221 129 202 137 148 205 148 154 246 211 156 143 154 213 199 227 158 168 113 174 106 102 103 123 105
Яблоки Серика: 242 236 173 247 124 199 206 180 166 147 219 238 221 241 145 130 125 142 165 198 156 107 105 132 102 176 113 177 154 227 123 158 196 245 181 237 154 156 211 246 185 158 203 148 202 205 Вес: 8201
Яблоки Берика: 163 159 244 236 210 236 189 210 117 211 195 231 221 192 177 166 155 184 131 198 224 123 103 106 174 119 168 158 204 199 217 213 235 183 104 143 107 127 194 154 147 221 129 137 148 Вес: 7862
Яблоки в корзине: 160 105 215 103 229 250 217 245 152 193 169 190 188 213 113 127 180 122 123 134 103 192 121 207 230 118 226 232 101 228 107 125 143 173 235 218 231 216 147 180 166 227 209 205 115 181
Яблоки Серика: 242 236 173 247 124 199 206 180 166 147 219 238 221 241 145 130 125 142 165 198 156 107 105 132 102 176 113 177 154 227 123 158 196 245 181 237 154 156 211 246 185 158 203 148 202 205 160 105 115 229 209 166 217 245 216 231 169 218 213 173 125 107 228 101 232 118 123 121 192 Вес: 12214
Яблоки Берика: 163 159 244 236 210 236 189 210 117 211 195 231 221 192 177 166 155 184 131 198 224 123 103 106 174 119 168 158 204 199 217 213 235 183 104 143 107 127 194 154 147 221 129 137 148 181 215 103 205 227 250 180 147 152 193 190 188 235 143 113 127 180 122 226 230 207 134 103 Вес: 11913
Общий вес яблок Серика: 12214, общий вес яблок Берика: 11913
(150k баллов)