Форум программистов, компьютерный форум, киберфорум
Наши страницы
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Другие темы раздела
PascalABC.NET Как скрыть в graphABC кнопки "свернуть", "Развернуть", "Закрыть" http://www.cyberforum.ru/pascalabc-net/thread1527383.html
Как скрыть в graphABC кнопки "свернуть", "Развернуть", "Закрыть"
PascalABC.NET Вычислить значения y, соответствующие каждому значению x (xn≤x≤xk, dx) по формуле: y=e−xsin(x),∣x∣≤a e−x2cos(x
Вычислить значения y, соответствующие каждому значению x (xn≤x≤xk, dx) по формуле: y=e−xsin(x),∣x∣≤a e−x2cos(x),∣x∣>a Найти максимальное и минимальное значение у. Входные данные: xn, xk, dx, a....
PascalABC.NET Перемещение объекта от одних координат к другим
Вот допустим даны точки: x1 = -128 y1 = 0 x2 = -64 y2 = -64 Как сделать перемещение объекта (любого) с x1,y1 до x2,y2 ??
PascalABC.NET Нужен образец псевдокода с листингом программы Можете отправить образец псевдокода с листингом программы)) спасибо http://www.cyberforum.ru/pascalabc-net/thread1526447.html
PascalABC.NET Почему не работает повторный вызов процедуры http://www.cyberforum.ru/pascalabc-net/thread1526067.html
program Program9; uses graphabc, abcobjects, abcbuttons; var b : rectangleABC; c : rectangleABC; left, right : integer; x:=100; y:=100;
Как задать фон в GraphABC? PascalABC.NET
Как задать фон в GraphABC?
PascalABC.NET Задача на нахождение суммы элементов заданного интервала с шагом 1
Помогите пожалуйста :help:. Программа запрашивает у пользователя два целых числа, затем вычисляет сумму чисел внутри этого интервала с шагом в единицу. Спасибо
PascalABC.NET Как избавиться от "прыжков" текста в окне graph Написал игрушку, работаю с ней дальше, но проблема стала с самого начала. При запуске игры текст печатает так как и должен, но со следующей надписи начинает "прыгать", доходит до нижней части экрана... http://www.cyberforum.ru/pascalabc-net/thread1525870.html
PascalABC.NET Игра с Мячом - Мяч пролетает указанные точки чуть дальше http://www.cyberforum.ru/pascalabc-net/thread1525743.html
Ошибки программы опишу ниже этого кода, но прежде вставьте этот код в PascalABC.NET и посмотрите результат (некоторые могут сразу догадаться в чём дело) uses System.Drawing, System.Windows.Forms,...
PascalABC.NET С помощью рекурсивной функции сложить все четные начиная с 2 до n Помогите пожалуйста, с решением двух задач 1)С помощью рекурсивной функции сложить все четные начиная с 2 до n 2)C помощью рекурсивной функции написать программу для алгоритма 1-1,1+1,2-1,3+...n http://www.cyberforum.ru/pascalabc-net/thread1525720.html
Fikafusik
22 / 22 / 34
Регистрация: 29.04.2014
Сообщений: 145
09.09.2015, 23:11 0

Разделить 12 литров воды поровну с помощью 2 пустых ведер с емкостью 8 и 5 литров

09.09.2015, 23:11. Просмотров 2029. Ответов 5
Метки (Все метки)

Ответ

Вот моё решение, при условии, что изначальный источник бесконечен. Решение, вроде бы, оптимальное. Во входном файле пишете три натуральных числа:
n m l
, где n - максимальное количество воды в первом сосуде, m - максимальное количество воды во втором сосуде, l - необходимое количество воды. В Вашем случае это "8 5 6". Программа выдаёт:
[0 : 0]
[8 : 0]
[3 : 5]
[3 : 0]
[0 : 3]
[8 : 3]
[6 : 5]
Т. е. 6 литров было получено после 6 переливаний.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
Type
  Vessel = Class
  Private
    n, nmax: Int64;
  Public
    Constructor Create(MaxVol: Int64);
    Procedure PourFrom;
    Begin
      n := 0;
    End;
    Procedure PourInto;
    Begin
      n := nmax;
    End;
    Procedure Transfuse(Var v: Vessel);
    Var
      tmp: Int64 := v.n;
    Begin
      v.n := v.nmax < v.n + n ? v.nmax : v.n + n;
      n := 0 > n + tmp - v.nmax ? 0 : n + tmp - v.nmax;
    End;
  End;
  Constructor Vessel.Create(MaxVol: Int64);
  Begin
    nmax := MaxVol;
  End;
  
Var
  t: Text;
  n, m, l: Int64;
  v1, v2: Vessel;
  
Begin
  Assign(t, 'Input.txt');
  Reset(t);
  Readln(t, n, m, l);
  Close(t);
  v1 := New Vessel(n);
  v2 := New Vessel(m);
  Milliseconds;
  WritelnFormat('[{0} : {1}]', v1.n, v2.n);
    Repeat
      If v1.n = 0 then 
        Begin
          v1.PourInto;
          WritelnFormat('[{0} : {1}]', v1.n, v2.n);
        End;
      If v2.n = v2.nmax then 
        Begin
          v2.PourFrom;
          WritelnFormat('[{0} : {1}]', v1.n, v2.n);
        End;
      v1.Transfuse(v2);
      WritelnFormat('[{0} : {1}]', v1.n, v2.n);
    Until (v1.n = l) or (v2.n = l);
  WritelnFormat('Решение заняло {0} мс.', MillisecondsDelta);
End.


Вернуться к обсуждению:
Разделить 12 литров воды поровну с помощью 2 пустых ведер с емкостью 8 и 5 литров
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.09.2015, 23:11

В посуде А (c) литров воды, в посуде В (х) литров воды. Из А сосуды вылили половину воды в сосуд В , потом из
В посуде А (c) литров воды, в посуде В (х) литров воды. Из А сосуды вылили половину воды в сосуд В...

Требуется разлить М литров жидкости в бутыли емкостью P1 л, P2 л и P3 л
Помогите пожалуйста решить задачу... завтро зачет 13. Требуется разлить М литров жидкости в бутыли...

Сколько литров каждого сока надо взять, чтобы приготовить S литров коктейлей?
В кафе готовят коктейль из малинового и ананасового соков. Известно, что X литров малинового сока...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru