Mnatsovna
?>

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

Информатика

Ответы

Ольга тимур

Сначала рассмотрим такую задачу: “Имеется некоторое количество рыб. Определить, возможен ли дележ рыб между тремя рыбаками в соответствии с условием задачи Дирака”[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

Филиппович_Николаевич
Program sum_nechet;
var a: array [0..100] of integer;
var b,i,c,k:integer;
begin
    randomize;
    for i:=1 to 10 do
    begin
        a[i]:=random(10);
        writeln(a[i]); // Это можно не писать, просто чтобы видеть числа в массиве, если интересно.
    end;
    c := 0;
    b := 0;
    for i:=1 to 10 do
    begin
        if a[i] mod 2 = 0 then
        b := b + a[i]
        else
        c := c+ a[i];
    end;
    writeln('Нечетных ' , c);
    writeln('Четных ' , b);
    k:=0;
    for i:=1 to 10 do
    begin
        if a[i] = 0 then
        k:= k+1
    end;
    writeln('Нулей ' , k)
end.
       
Сергеевна
Для перевода целого двоичного числа в шестнадцатиричную систему счисления используется тот факт, что 16=2⁴. Справа налево группируем двоичные разряды по четыре, формируя тетрАды (они же - полубайты). Каждую тетраду заменяем соответствующей шестнадцатиричной цифрой.
11110000₂ = 1111 0000₂ = F0₁₆
100100100₂ = 1 0010 0100₂ = 124₁₆

Для перевода двоичного числа в десятичную систему используем расширенную запись числа по его основанию.
11110000₂ = 1х2⁷+1х2⁶+1х2⁵+1х2⁴+0х2³+0х2²+0х2¹+0х2⁰ = 128+64+32+16 = 240₁₀
На практике просто суммируют те степени двойки, у которых множители равны единице, а члены с нулевыми множителями не пишут.
100100100₂ = 2⁸+2⁵+2² = 256+32+4 = 292₁₀

По такому же принципу делается перевод и из шестнадцатиричной системы в десятичную.
F0₁₆ = 15x16¹+0x16⁰ = 240+0 = 240₁₀
124₁₆ = 1x16²+2x16¹+4x16⁰ = 256+32+4 = 292₁₀

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Три рыбака легли спать, не плдилив улова.проснувшись ночью, первый рыбак одну, а из остатка забрал треть.второй и третий поступили аналогичным образом.какое наименьшее количество рыб может удовлетворять условию ? составе программу на известным языке программирования.
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

Andrei-Shchukin
af-rc7893
frsergeysavenok
Панков1101
ibarskova1542
Valerevna Tuzova
olofinskayae
Вакуленко
Tkachenko1050
tatyanaryzhkova
Andreevich440
skalegin68
zoomagazinkotmatroskin
bogdanovaoksa
Sacharov84