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

Исполнитель Водолей - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Метод Зейделя в С++ http://www.cyberforum.ru/cpp-beginners/thread233660.html
всем доброго времени суток... у меня такая проблема, есть программа по решению систем линейных уравнений методом Зейделя написали мне её.. даже не пойму в чем, потому как знаком только с С++ и то еле еле можно ли эту ерунду быстро переписать на С++ заранее благодарен! Uses CRT; Const maxn = 10; Type
C++ Найти максимальный элемент матрицы под главной диагональнью Подскажите как найти максимальный элемент матрицы под главной диагональнью в С++? http://www.cyberforum.ru/cpp-beginners/thread233643.html
C++ Не могу найти ошибку
переменная newk передается по адресу. В начале все нормально, но когда заканчивается функция obrabotka, то newk возвращает свое исходное(-8843543) значение. Почему? #include <iostream> using namespace std; bool proverka(int *mas, int k) { for(int i=0;i<k;i+=2) if(mas<0) return false; return true;
Программа выводящая слова и их количество. C++
Ввести строку. Вывести различные слова вместе с количеством их появления в строке. Буду очень признателен если ктото напишет это дело в синтаксисе C. Если сдам это завтра, то получу зачет, а его очень хочется получить)
C++ Кубики, динамическое программирование http://www.cyberforum.ru/cpp-beginners/thread233632.html
Здраствуйте! Есть задача ( на украинском) Незважаючи на те, що Петрик П’яточкін ходить до школи, він все ще продовжує гратися з кубиками. З однакових кубиків він викладає сходинки вздовж стіни. Для цього складає стовпчики з кубиків таким чином: перший стовпчик стоїть впритул до стіни; другий стовпчик стоїть впритул до стіни і впритул до першого стовпчика праворуч від нього; третій...
C++ Время выполнения(сложность) Как вычислить время выполнения программы? и что такое NlogN? подробнее

Показать сообщение отдельно
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376

Исполнитель Водолей - C++

25.01.2011, 01:45. Просмотров 2812. Ответов 4
Метки (Все метки)

У исполнителя “Водолей” есть два сосуда, первый объемом A литров, второй объемом B литров, а также кран с водой. Водолей может выполнять следующие операции:

1. Наполнить сосуд A (обозначается >A).
2. Наполнить сосуд B (обозначается >B).
3. Вылить воду из сосуда A (обозначается A>).
4. Вылить воду из сосуда B (обозначается B>).
5. Перелить воду из сосуда A в сосуд B (обозначается как A>B).
6. Перелить воду из сосуда B в сосуд A (обозначается как B>A).

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

Программа получает на вход три натуральных числа A, B, N, не превосходящих 104 Вам необходимо вывести алгоритм действий Водолея, который позволяет получить в точности N литров в одном из сосудов, если же такого алгоритма не существует, то программа должна вывести текст Impossible.

Количество операций в алгоритме не должно превышать 105. Гарантируется, что если задача имеет решение, то есть решение, которое содержит не более, чем 105 операций.
Написал свой код:
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int A,B,N,x=0,y=0,z;
cin>>A>>B>>N;
z=2*A-B;
if(z>0)
{
z=2*A-B;
}
else
{
z=B-2*A;
}
if((A<N)&&(B<N))
{
cout<<"Impossible"<<endl;
}
else
{
if(A<B)
{
if((N%z==0)||(z%N==0))//проверка возможности действия
{
if(N==2*A-B)//1 случай
{
y=A;
x=0;
do
{
x=x+y;
if(x<B)
{
y=0;
}
else
{
y=x-B;
x=B;
}
cout<<">A"<<endl;
cout<<"A>B"<<endl;
}while((x!=N)||(y!=N));
}
else//2 случай
{
x=B; cout<<">B"<<endl;
y=0;
{
    do{
    y=A;
    if(x>A)
    {
    x=x-A;
    cout<<"B>A"<<endl;
    cout<<"A>"<<endl;
    if((x-A)==N)
    {
    cout<<">B"<<endl;
    cout<<"B>A"<<endl;
    break;}}
    else
    {
    A=x;
    x=B;
    }}while((x!=N)||(y!=N));}}}
else
{
cout<<"Impossible"<<endl;
}}
else
{
if(A>B)
{
if((N%z==0)||(z%N==0))//проверка возможности действия
{
if(N==2*B-A)//1 случай
{
y=B;
x=0;
do
{
x=x+y;
if(y<A)
{
x=x+y;
y=0;
}
else
{
y=x-A;
x=A;
}
cout<<">B"<<endl;
cout<<"B>A"<<endl;
}while((x!=N)||(y!=N));
}
else//2 случай
{
x=A; cout<<">A"<<endl;
y=0;
{
    do{
    y=B;
    if(x>B)
    {
    x=x-B;
    cout<<"A>B"<<endl;
    cout<<"B>"<<endl;
    if((x-B)==N)
    {
    cout<<">A"<<endl;
    cout<<"A>B"<<endl;
    break;}}
    else
    {
    B=x;
    x=A;
    }}while((x!=N)||(y!=N));}}}
else
{
cout<<"Impossible"<<endl;
}}
else
{
cout<<"Impossible"<<endl;
}}}}
Почему-то когда ввожу данные, цикл не прекращается. Помогите, пожалуйста, в чём ошибка
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru