Три рыбака легли спать,не плдилив улова.проснувшись ночью,первый рыбак одну,а из остатка забрал треть.второй и третий поступили аналогичным образом.какое наименьшее количество рыб может удовлетворять условию ? составе программу на известным языке программирования.
Ответы на вопрос:
сначала рассмотрим такую : “имеется некоторое количество рыб. определить, возможен ли дележ рыб между тремя рыбаками в соответствии с условием дирака”[1] .
в программе решения этой используем следующие величины:
k0 - общее количество пойманных рыб;
k - количество рыб, оставшееся тому или иному рыбаку;
take - количество рыб, которые взял тот или иной рыбак;
i - номер рыбака;
partit - величина логического типа, определяющая возможность дележа (взятия каждым рыбаком трети оставшегося количества рыб).
на */школьном алгоритмическом языке /*соответствующая программа имеет вид:
_алг_ available_partition
_нач_ _цел_ k0, k, take, i, _лог_ partit
¦ _вывод_ _нс_, "введите количество рыб"
¦ _ввод_ k0
¦ k: =k0
¦ i: =1
¦ _нц_ |цикл “действий” каждого рыбака
¦ ¦ k: =k-1 | осталось после выбрасывания одной рыбы
¦ ¦ _если_ mod(k,n)=0
¦ ¦ ¦_то_ | i-й рыбак может взять треть оставшихся рыб
¦ ¦ ¦ partit: =_да_
¦ ¦ ¦ take: =div(k,3) | берет i-й рыбак
¦ ¦ ¦ k: =k- take | оставшееся количество рыб
¦ ¦ ¦_иначе_
¦ ¦ ¦ partit: =_нет_ | при k0 рыбах дележ невозможен
¦ ¦ _все_
¦ ¦ i: =i+1
¦ i> n _или_ _не_ partit
¦ _если_ partit
¦ ¦_то_
¦ ¦ _вывод_ _нс_, "при таком количестве рыб дележ возможен"
¦ ¦_иначе_
¦ ¦ _вывод_ _нс_, "при таком количестве рыб дележ невозможен"
¦ _все_
_кон_
после этого программа нахождения минимального количества рыб, удовлетворяющего условию дирака, может быть оформлена кратко:
_алг_
_нач_ _цел_ k0
¦ k0: =0 |начальное значение диапазона поиска
¦ _нц_ _пока_ _не_ avail_partit (k0)
¦ ¦ k0: =k0+1 |очередное значение
¦ _кц_
¦ _вывод_ _нс_, "наименьшее количество рыб,"
¦ _вывод_ "удовлетворяющее условию : ", k0
_кон_
где avail_partit(k0) - функция логического типа, определяющая возможность дележа k0/ /рыб в соответствии с условием , составленная на основе программы, чуть выше:
алг_ _лог_ avail_partit (_арг_ _цел_ k0)
_нач_ _цел_ k, take, i, _лог_ partit
¦ k: =k0
¦ i: =1
¦ _нц_
¦ ¦ k: =k-1
¦ ¦ _если_ mod(k,3)=0
¦ ¦ ¦_то_
¦ ¦ ¦ partit: =_да_
¦ ¦ ¦ take: =div(k,3)
¦ ¦ ¦ k: =k- take
¦ ¦ ¦ _иначе_
¦ ¦ ¦ partit: =_нет_
¦ ¦ _все_
¦ ¦ i: =i+1
¦ i> 3 _или_ _не_ partit
¦ _знач_: = partit | значение функции
_кон_
соответствующая программа на паскале:
{ “рыбаки и рыбки”}
var
k0: integer;
function avail_partit (k0: integer): boolean;
var
k, take, i: integer;
partit: boolean;
begin
k: =k0;
i: =1;
repeat {цикл “действий” каждого рыбака}
k: =k-1; {осталось после выбрасывания одной рыбы}
if k mod 3 = 0 then
{i-й рыбак может взять треть оставшихся рыб}
begin
partit: =true;
take: =k div 3; {берет i-й рыбак}
k: =k - take {оставшееся количество рыб}
end
else
partit: =false; {дележ невозможен}
i: =i+1
until (i> 3) or not partit;
avail_partit: = partit {значение функции}
end;
begin {основной программы}
k0: =0; {начальное значение диапазона поиска}
while not avail_partit(k0) do
k0: =k0+1; {очередное значение}
write('наименьшее количество рыб, ');
writeln('удовлетворяющее условию : ', k0)
end.
выполнив программу, можно увидеть, что минимальное количество рыб, удовлетворяющее условию , равно 25. имеются и большие значения (52, 79, 106,
имеется и другой способ решения . можно, так сказать, идти не от общего количества пойманных рыб, а от числа рыб, доставшихся третьему рыбаку. если эту величину обозначить take3, то можно записать, что количество рыб, оставшееся тому или иному рыбаку, равно:
1) третьему рыбаку: k3 = 3* take3 + 1;
2) второму: k2 = 3*k3 + 1;
3) первому (то есть общее количество пойманных рыб[2]): k1 = 3*k2 + 1.
перебирая значения k3, равные 1, 2, 3, …, можно найти такое минимальное число, при котором значения величин k2 и k1 есть целые числа.
программа, реализующая такой подход к решению , имеет вид:
{ "рыбаки и рыбки"}
var
take3, k3: word;
k2, k1: real;
begin
take3: =1;
repeat
k3: =3* take3+1;
k2: =k3*3/2+1;
k1: =k2*3/2+1;
take3: = take3+1
until (trunc(k2)=k2) and (trunc(k1)=k1);
write('наименьшее количество рыб, ');
writeln('удовлетворяющее условию : ', trunc(k1))
end.
рассмотренную можно решать и при другом числе рыбаков. соответствующие результаты представлены в таблице (естественно, что некоторые из них являются условными).
число рыбаков
4
5
6
7
искомое количество рыб
253
3121
46651
823537
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
savva13723.10.2022 19:08
-
iambigboy30.08.2020 12:54
-
gshshagag16.03.2023 09:13
-
TheDrever11.11.2020 08:50
-
виквик403.04.2023 02:29
-
Ксюника116.09.2021 21:47
-
Ivan70007615.05.2022 02:29
-
mhjkglckktcfcmjkfg23.04.2020 14:20
-
dymovvla0192815.02.2021 04:49
-
toriblinova23.06.2021 23:16
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.