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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вызов из разных потоков функции чтения из файла, dll http://www.cyberforum.ru/cpp-beginners/thread557504.html
Доброго времени суток. Помогите пожалуйста написать программу, вот задание: Вызов из разных потоков функции чтения из файла. Функция находится в dll динамическое подключение . Функция чтения: заголовок, данные. Заранее благодарен за любую помощь. Добавлено через 5 часов 9 минут up, всё еще нужна помощь
C++ Задача на двумерный массив Найти максимальный элемент матрицы http://www.cyberforum.ru/cpp-beginners/thread557503.html
C++ работа с файлами
1. Написать программу, которая создает файл и записывает в него 5 введенных пользователем целых чисел, при чем каждое число должно находиться в отдельной строке.(без использования файловых потоков) 2. написать программу, которая дописывает файл из 1 задания 5 целых чисел полученных с помощью датчика случайных чисел. Вывести на экран содержимое файла.(без использования файловых потоков) 3....
Считывание строки из файла. C++
Появилась проблема. Строка из файла считывается, но не реагирует на пробелы. И не находит конец строки. #include <fstream> #include<iostream> using namespace std; int main(){ char s; ifstream fin ("part2num.txt"); fin>>s;
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). Если нет, то выяснить, как это можно сделать за два хода Поле шахмотной доски определяеся парой натуральных чисел, каждая из которых не превосходит восьми: первое число номер вертикали (при счете слева на права), второе-номер (при счете снизу вверх). даны натуральные числа k,l,m,n каждое из которых не превосходит восьми. Требуется: выяснить можно ли с поля (k,l) одним ходом ферьзя попасть на поле(m,n). Если нет, то выяснить, как это можно сделать... подробнее

Показать сообщение отдельно
Rumise
1 / 1 / 0
Регистрация: 24.04.2012
Сообщений: 13
24.04.2012, 19:41     Логическая задача на переливание жидкостей
Даны 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";
    }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru