Три рыбака легли спать,не плдилив улова.Проснувшись ночью,1-ый рыбак одну,а из остатка

Три рыбака легли почивать,не плдилив улова.Проснувшись ночкой,первый рыбак одну,а из остатка отобрал треть.2-ой и 3-ий поступили подобным образом.Какое меньшее количество рыб может удовлетворять условию задачки?
Составе программку на знаменитым языке программирования.

Задать свой вопрос
1 ответ

Поначалу осмотрим такую задачку: Имеется некое количество рыб. Найти, вероятен ли дележ рыб между тремя рыбаками в соответствии с условием задачки Дирака[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

_кц___при_ igt;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

_кц___при_ igt;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 (igt;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

Лидия Балденкова
В иготе какой ответ?
Amelija Tumaeva
23
, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт