ЯГ
Яна Гиленко

помогите, пожалуйста, на с++

Для решения задачи о перевозке волка, козы и капусты ведущий программист планеты ФОР-
МИН написал программу для робота-лодочника.
По условию задачи робот-лодочник должен перевезти через реку на лодке волка, козу и капусту,
при этом он может перевезти за один рейс только одного из трех «героев» . На одном берегу нельзя
оставлять одних волка и козу или козу и капусту, потому что кто-то кого-то может съесть.
По условию задачи все герои сначала находятся на одном берегу.
Система команд робота – лодочника состоит из четырех команд:
 0 — лодочник переплывает реку один;
 1 — лодочник перевозит волка;
 2 — лодочник перевозит козу;
 3 — лодочник перевозит капусту.
Например, программа, составленная программистом из ФОРМИНа для решения задачи о пере-
возке, может выглядеть так: 1102010003.
Длина строки из цифр 0, 1, 2, 3 может достигать до 100 символов.
Вам предстоит определить, решила ли программа поставленную задачу.
Будем считать, что задача решена, если после выполнения очередной команды программы все
«герои» оказались на другом берегу (за нашими «героями» сразу приходит пастух с другого берега) .
В таком случае программа автоматически завершается, и оставшиеся до конца строки
команды не выполняются. При этом все выполненные команды должны быть корректными,
т. е. не должно возникнуть таких ситуаций:
 программа пытается взять с берега того «героя» , которого нет на этом берегу;
 после очередной команды на одном берегу остались несовместимые «герои» .
Обратите внимание, что команды, идущие после той команды, в результате выполнения которой
задача оказалась решена, не обязаны быть корректными.

Формат входных данных

В единственной строке дана непустая последовательность из цифр 0, 1, 2, 3, длина которой не
превышает 100 символов. Гарантируется, что другие символы в последовательности не используют-
ся. Нумерация символов в строке начинается с 1.

Формат выходных данных

Выведите в первой строке слово «YES» без кавычек, если робот-лодочник смог решить задачу
о перевозке, а во второй строке номер символа в строке из цифр такой, что после выполнения
команды, задаваемой этим символом, все «герои» оказались на другом берегу, и, следовательно,
программа завершилась.
Выведите в первой строке слово «NO» без кавычек, если робот-лодочник не смог решить задачу
о перевозке, а во второй строке номер символа в строке из цифр, на котором Вы сделали вывод о
том, что наш герой из ФОРМИНа не решил задачу.

НГ
Наталья Гойда

По чём грибы

Екатерина Абрамова
Екатерина Абрамова

И сколько за эту работу запросил ведущий программист планеты ФОРМИН? 😉
Задача простенькая, хотя пока прочитаешь условие.. . Однако стучать по клавишам придется не одну минуту 😞

ЯГ
Яна Гасанова

Я так решил эту задачу:
Формат вывода другой, но в целом, задача запрограммирована правильно, как мне кажется.
=======================
#include
#include
using namespace std;

int main(){
srand(time(0));

int a = 0, b = 3;
bool ar[4]; // нулевой элемент - лодочник, первый - волк, второй - коза, третий - капуста
int num;

for(int i(0); i < 4; i++){ // все четверо, лодочник, волк, коза и капуста, на правом берегу
ar[i] = true;
cout << ar[i] << ' ';
}
cout << endl;

for(int i(0); true; i++){ // будем переправлять
num = rand() % (b - a + 1) + a;

if(ar[num] != ar[0]) continue; // если выбранный персонаж находится не на одном бергу с лодочником, то повторить рандом

if(ar[num] == true)
switch (num){
case 0: ar[0] = false; break; // если выбран лодочник, то он переправляется на левый берег один.
case 1: ar[0] = false; ar[1] = false; break; // если выбран кто-то кроме него, то он переправляется на левый берег с лодочником.
case 2: ar[0] = false; ar[2] = false; break;
case 3: ar[0] = false; ar[3] = false; break;
}
else
switch (num){
case 0: ar[0] = true; break; // если выбран лодочник, то он переправляется на правый берег один.
case 1: ar[0] = true; ar[1] = true; break; // если выбран кто-то кроме него, то он переправляется на правый берег с лодочником.
case 2: ar[0] = true; ar[2] = true; break;
case 3: ar[0] = true; ar[3] = true; break;
}

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

if(ar[num] == true)
switch (num){
// если лодочник перепавился на левый берег, а на правом берегу остались волк и коза или коза и капуста, то нужно вернуть лодочника на правый берег и заново сделать рандом персонажа
case 0: if((ar[1] == false && ar[2] == false) || (ar[2] ==false && ar[3] == false)) {ar[0] = false; continue;} break;
// если выбран волк для переправы на левый берег, а коза и капуста остались на правом, то возврщаем волка и лодочника на правый берег и выбираем нового персонажа для переправы
case 1: if(ar[2] == false && ar[3] == false){ ar[0] = false; ar[1] = false; continue;} break;
case 2: break;
case 3: if(ar[1] == false && ar[2] == false){ ar[0] = false; ar[3] = false; continue;} break;
}
else
switch (num){
case 0: if((ar[1] == true && ar[2] == true) || (ar[2] ==true && ar[3] == true)) {ar[0] = true; continue;} break;
// если выбран волк для переправы на левый берег, а коза и капуста остались на правом, то возврщаем волка и лодочника на правый берег и выбираем нового персонажа для переправы
case 1: if(ar[2] == true && ar[3] == true){ ar[0] = true; ar[1] = true; continue;} break;
case 2: break;
case 3: if(ar[1] == true && ar[2] == true){ ar[0] = true; ar[3] = true; continue;} break;

}

cout << num << ' ';
//for(int j(0); j < 4; j++) // смотрим, кто куда переправился
//cout << ar[j] << ' ';

//cout << endl;

if(ar[0] == false && ar[1] == false && ar[2] == false && ar[3] == false) break; // условие окончания цикла - когда все находятся на правом бергу
}

cout << endl;
for(int i(0); i < 4; i++)
cout << ar[i] << ' ';

system("pause > nul");
return 0;
}

Похожие вопросы
Помогите пожалуйста! =(
помогите пожалуйста в с++
Помогите пожалуйста!! ! =))
С++ Помогите пожалуйста
Помогите пожалуйста С++
С++ Помогите пожалуйста.
Помогите пожалуйста!! ! С++
Помогите, пожалуйста, еще!!! С++
Помогите, пожалуйста!!! С++
помогите пожалуйста помогите!!!!