Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Логическая задача на переливание жидкостей - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вызов из разных потоков функции чтения из файла, dll http://www.cyberforum.ru/cpp-beginners/thread557504.html
Доброго времени суток. Помогите пожалуйста написать программу, вот задание: Вызов из разных потоков функции чтения из файла. Функция находится в dll динамическое подключение . Функция чтения:...
C++ Задача на двумерный массив Найти максимальный элемент матрицы http://www.cyberforum.ru/cpp-beginners/thread557503.html
C++ работа с файлами
1. Написать программу, которая создает файл и записывает в него 5 введенных пользователем целых чисел, при чем каждое число должно находиться в отдельной строке.(без использования файловых потоков)...
Считывание строки из файла. C++
Появилась проблема. Строка из файла считывается, но не реагирует на пробелы. И не находит конец строки. #include <fstream> #include<iostream> using namespace std; int main(){ char s; ifstream...
C++ Даны целые числа a1, a2, a3. Получить целочисленную матрицу [ by]i, j= 1,2,3 для которой bij= ai - 3aj http://www.cyberforum.ru/cpp-beginners/thread557490.html
Даны целые числа a1, a2, a3. Получить целочисленную матрицу i, j= 1,2,3 для которой bij= ai - 3aj
C++ Выяснить можно ли с поля (k,l) одним ходом ферьзя попасть на поле(m,n). Если нет, то выяснить, как это можно сделать за два хода Поле шахмотной доски определяеся парой натуральных чисел, каждая из которых не превосходит восьми: первое число номер вертикали (при счете слева на права), второе-номер (при счете снизу вверх). даны... подробнее

Показать сообщение отдельно
Rumise
1 / 1 / 0
Регистрация: 24.04.2012
Сообщений: 13

Логическая задача на переливание жидкостей - C++

24.04.2012, 19:41. Просмотров 2010. Ответов 2
Метки (Все метки)

Даны 3 стакана: 1 - й вмещает 7 литров, 2-й вмещает 5 литров, 3-й вмещает 12 литров. Первые 2 стакана пусты, в третьем 12 литров воды. Воду можно переливать из одного стакана в другой до опустошения либо заполнения одного из стаканов. Необходимо, чтобы в 1 стакане оказалось 6 литров воды. Вручную получается это сделать за 10 шагов. Я пытаюсь написать программу, которая сама будет переливать жидкость и в конце концов найдет правильный вариант. Но возникли сложности с циклами, уже целый день ломаю голову. Со всеми условиями, которые в коде, циклы зависают, и не могу понять почему.


C
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
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <string.h>
#include "math.h"
#include "time.h"
#include <stdlib.h>
 
using namespace std;
 
 
void main()
{
    srand ((unsigned)time(NULL));
    int S[3] = {0, 0, 12};// содержит данные о заполненности каждого из стаканов
    const int S1[3] = {7, 5, 12}; // содержит максимальную емкость каждого из стаканов
    int x = 0, y = 0, count = 0;
    int x1 = 4, y1 = 4;
 
    
    while (S[0] != 6)
    {   
        do
        {
            x = rand() %3;// случайно выбирает из какого стакана переливать воду
        }
        while (S[x] == 0 || x == y1 );// проверяет не пуст ли стакан из которого переливаем воду
 
        do
        {               
            y = rand() %3;  // случайно выбирает в какой стакан переливать воду
        }   
        while ((y == x) || (S[y] == S1[y]) || y == x1); // проверяет, чтобы мы не переливали жидкость в тот-же стакан и проверяет не полон-ли стакан, в который мы наливаем жидкость
        
        cout << "x = " << x << " y = " << y << "\n";
        
 
    
        while ((S[x] != 0) && (S[y] < S1[y]))// переливает жидкость пока один из стаканов не опустошится или не заполнится
        {
            S[x]--;
            S[y]++;
        }
        x1 = x;// с помощью этих значений я пытаюсь избежать случаев, когда мы переливаем жидкость в тех-же стаканах,что и в прошлый раз, но в обратную сторону, чтобы сделать алгоритм умнее.
        y1 = y; 
        
        count++;
        cout << "Step № " << count<< "\n";
        cout <<"First glass = " << S[0]<<"\t"<<"Second glass = " << S[1]<<"\t"<<"Third glass = " << S[2]<<"\n";
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru