Здравствуйте. Значит, задача состоит в том, чтобы переправить 3 рыцарей и 3 их оруженосцев на другой берег на лодке, в которую вмещается 2 человека. При этом каждый оруженосец не может находится в компании других рыцарей. Проблема в моем коде в том, что, благодаря моему чудесному алгоритму, я перевожу на другой берег только первых 1 или 2 рыцарей/оруженосцев не смотря на то, кто с кем в паре, и из-за этого часто получается, что какой-то оруженосец остается без своего рыцаря :)
#include <iostream>
#include <windows.h>
using namespace std;
class game {
public:
int counto, i;
char left[6], right[6];
int knights, pages;
bool isOnRightSide;
int knightsOnLeftSide, pagesOnLeftSide;
int knightsOnRightSide, pagesOnRightSide;
game() {
counto = 1;
knightsOnLeftSide = pagesOnLeftSide = 3;
knightsOnRightSide = pagesOnRightSide = 0;
isOnRightSide = false;
for (i = 0; i<3; i++) {
left[i] = 'Л';
left[i + 3] = 'з';
right[i] = ' ';
right[i + 3] = ' ';
}
}
void get() {
start:
cout << "\nСкільки лицарів переправити?\n";
cin >> knights;
getchar();
cout << "\nСкільки зброєносців переправити?\n";
cin >> pages;
getchar();
if (knights>3 || pages>3 || knights<0 || pages<0)
goto start;
else if ((knights + pages)>2 || (knights + pages == 0))
goto start;
}
void display() {
cout << "\nЛіва сторона\tПрава сторона\n";
for (i = 0; i<3; i++)
cout << left[i] << " ";
cout << "\t\t";
for (i = 0; i<3; i++)
cout << right[i] << " ";
cout << endl;
for (i = 3; i<6; i++)
cout << left[i] << " ";
if (counto % 2 == 0) {
isOnRightSide = true;
cout << "\t |__|";
}
else {
isOnRightSide = false;
cout << "|__|\t ";
}
for (i = 3; i<6; i++)
cout << right[i] << " ";
cout << endl;
}
//Начало передвижения и проблемного кода
void moveToRightSide() {
for (i = 0; i<knights; i++) {
if (left[0] == 'Л') {
left[0] = ' ';
right[0] = 'Л';
knightsOnLeftSide--;
knightsOnRightSide++;
}
else if (left[1] == 'Л') {
left[1] = ' ';
right[1] = 'Л';
knightsOnLeftSide--;
knightsOnRightSide++;
}
else if (left[2] == 'Л') {
left[2] = ' ';
right[2] = 'Л';
knightsOnLeftSide--;
knightsOnRightSide++;
}
}
for (i = 0; i<pages; i++) {
if (left[3] == 'з') {
left[3] = ' ';
right[3] = 'з';
pagesOnLeftSide--;
pagesOnRightSide++;
}
else if (left[4] == 'з') {
left[4] = ' ';
right[4] = 'з';
pagesOnLeftSide--;
pagesOnRightSide++;
}
else if (left[5] == 'з') {
left[5] = ' ';
right[5] = 'з';
pagesOnLeftSide--;
pagesOnRightSide++;
}
}
}
void moveToLeftSide() {
for (i = 0; i<knights; i++) {
if (right[0] == 'Л') {
right[0] = ' ';
left[0] = 'Л';
knightsOnLeftSide++;
knightsOnRightSide--;
}
else if (right[1] == 'Л') {
right[1] = ' ';
left[1] = 'Л';
knightsOnLeftSide++;
knightsOnRightSide--;
}
else if (right[2] == 'Л') {
right[2] = ' ';
left[2] = 'Л';
knightsOnLeftSide++;
knightsOnRightSide--;
}
}
for (i = 0; i<pages; i++) {
if (right[3] == 'з') {
right[3] = ' ';
left[3] = 'з';
pagesOnLeftSide++;
pagesOnRightSide--;
}
else if (right[4] == 'з') {
right[4] = ' ';
left[4] = 'з';
pagesOnLeftSide++;
pagesOnRightSide--;
}
else if (right[5] == 'з') {
right[5] = ' ';
left[5] = 'з';
pagesOnLeftSide++;
pagesOnRightSide--;
}
}
}
//Конец передвижения и проблемного кода
bool isGameActive() {
if (knightsOnLeftSide<pagesOnLeftSide && knightsOnLeftSide>0 || knightsOnRightSide<pagesOnRightSide && knightsOnRightSide>0) {
system("cls");
cout << "\n\n\tВи програли!\n";
return false;
}
else if (pagesOnRightSide == knightsOnRightSide && pagesOnRightSide == 3 && knightsOnRightSide == 3) {
system("cls");
cout << "\n\n\tВи перемогли!\n";
return false;
}
return true;
}
};
int main() {
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
game g;
while (g.isGameActive()) {
g.display();
g.get();
if (g.isOnRightSide == false)
g.moveToRightSide();
else
g.moveToLeftSide();
g.counto++;
}
getchar();
return 0;
}
Прошу помощи только в минимизации кода и его поправки в двух функциях движения. Заранее спасибо.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Задано текстовый файлОпределить номер заданного пользователем числа, если такого нет в строке, то сообщить об этом
Не могу понять что так с программой переделывал из инета код для построения графика функций вроде должна прога строить но выполняеться if и выводиться...
Доброго времени суток, изучаю на втором курсе С++, дали задание написать код программы для построения графика уравнения 2cosx-4,5x+076=0 интервалы(xn=0...