C++; Pascal; Java;Python Серик и Берик собрали все яблоки в саду. Однако, сезон яблок подходит к концу и в саду осталось очень м
C++; Pascal; Java;Python Серик и Берик собрали все яблоки в саду. Однако, сезон яблок подходит к концу и в саду осталось очень мало яблок. Вместе они собрали всего N корзинок с яблоками. По этой причине, ребята решают поделить все собранные яблоки. Однако, Серику не понравилось предложение Берика поделить все количество яблок поровну. В этом случае кому-то может достаться больший вес яблок, так как, у каждого яблока разный вес. Серик предложил поделить яблоки, в каждой корзинке, с помощью монетки.
Берик и Серик выложили яблоки из каждой корзинки перед собой в ряд. Таким образом, получилось N рядов с корзинками. Для каждого ряда, ребята поочередно бросают монетку: если монетка падает решкой, то бросивший ее мальчик берет первое яблоко в ряду. Если выпадает орел, то берут последнее яблоко в ряду.
Каков будет общий вес яблок из каждой который наберет Серик, если он бросает монетку первым?
<u>PascalABC.NET 3.3.5, сборка 1662 от 29.04.2018</u> <u>Внимание! Если программа не работает, обновите версию!</u>
type Монетка=(Орел,Решетка); КорзинаЯблок = List<integer>;
function БросокМонетки:=Random(2)=1 ? Орел : Решетка;
function ЗаполнитьКорзину(d:char):КорзинаЯблок; // считаем, что яблоко весит от 100 до 250 г, // и что в корзину вмещается около 8 кг яблок. begin Result:=new КорзинаЯблок; var ВесЯблок:=0; while ВесЯблок<=8000 do begin 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.
<u>Пример без отладочной выдачи</u> Собрано корзин: 5 1 - отладочный вывод, иное - только результат: 0 Общий вес яблок Серика: 20399, общий вес яблок Берика: 19977