i не правильно считает в цикле
при цикле не правильно считает i и еще кажется if else неправильно срабатывает. Так же пробывал через откладку посмотреть, но результат не дало. Помогите пожалуйста решить.
//игра пьяница со стеком
#include<iostream>
#include<stack>
#include<random>
#include<ctime>
using namespace std;
int main()
{
srand(time(0));
setlocale(LC_ALL, "RU");
stack<int> player1, player2;
int n;
cout << "Сколько карт будет в колоде?" << endl;
cin >> n;
int nn = n / 2;
for (int i = 0; i < nn; i++) {
int a;
a = rand() % 10 + 1;
player1.push(a);
}
for (int i = 0; i < nn; i++) {
int a;
a = rand() % 10+1;
player2.push(a);
}
for (int i = 0; i < nn; i++) {
cout << player1.top() << " ";
player1.pop();
}
cout << endl;
for (int i = 0; i < nn; i++) {
cout << player2.top() << " ";
player2.pop();
}
int i = 0; // Для первого игрока
int ii = 0; //Для второго игрока игрока
while (!player1.empty() && !player2.empty()) {
int card1 = player1.top();
player1.pop();
int card2 = player2.top();
player2.pop();
if (card1 > card2) {
player1.push(card1);
player1.push(card2);
}
else {
player2.push(card1);
player2.push(card2);
}
i++;
}
if (player2.empty()) {
cout << "Победил первый игрок! Всего ходов было " << i << endl;
}
else {
cout << "Победил второй игрок! Всего ходов было " << i << endl;
}
}
Ответы (2 шт):
Здесь pop() выкидывает у игроков все карты до начала игры.
for (int i = 0; i < nn; i++) {
cout << player1.top() << " ";
player1.pop();
}
cout << endl;
for (int i = 0; i < nn; i++) {
cout << player2.top() << " ";
player2.pop();
}
Исправить можно, например, так:
- Удалить вышеуказанный блок кода
int a;
for (int i = 0; i < nn; i++) {
a = rand() % 10 + 1;
cout << a << " ";
player1.push(a);
}
for (int i = 0; i < nn; i++) {
a = rand() % 10+1;
cout << a << " ";
player2.push(a);
}
Нашел у себя от 2013 года творение :) — моделировал игру в пьяницу. Держите, не жалко :)
После каждого 1М ходов :) выводит размер колод у игроков (изначально колода в 36 карт тасуется и сдается по 18 карт на руки), количество ходов и минимальная достигнутая колода.
По-моему, игра принципиально бесконечная, нет? Разве что изначально колода разделится так, что игра тут же и закончится...
#include <deque>
#include <vector>
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <cstdlib>
#include <ctime>
using namespace std;
int main(int argc, const char * argv[])
{
srand(time(0));
vector<int> c(36);
for(int i = 0; i < 36; ++i)
{
c[i] = (i/4) + 6;
}
for(int i = 0; i < 36; ++i)
{
int j = rand()%(36-i)+i;
int t = c[i];
c[i] = c[j];
c[j] = t;
}
deque<int> d1, d2;
for(int i = 0; i < 36; i+=2)
{
d1.push_back(c[i]);
d2.push_back(c[i+1]);
}
unsigned long long i = 0;
for(int min = 36*2;!d1.empty() && !d2.empty();++i)
{
if (min > d1.size()) min = d1.size(); else if (min > d2.size()) min = d2.size();
if (i%(1024*1024) == 0)
{
cout << setw(2) << d1.size() << " : " << setw(2) << d2.size()
<< " " << setw(12) << i << setw(12) << min << endl;
}
if (d1.front() < d2.front())
{
d2.push_back(d2.front());
d2.push_back(d1.front());
} else if (d1.front() > d2.front())
{
d1.push_back(d1.front());
d1.push_back(d2.front());
} else
{
d1.push_back(d1.front());
d2.push_back(d2.front());
}
d1.pop_front();
d2.pop_front();
if (d1 == d2) break;
}
cout << "Num = " << (i+1) << endl;
for(int i = 0; i < 36; i++)
{
cout << setw(3) << i << setw(12) << c[i] << endl;
}
}
P.S. И чего это я перетасовывал колоду руками? уже и не помню... Ну, пусть так и будет, непринципиально... Еще зачем-то при одинаковых колодах выход. Что-то я такое экспериментировал, но за давностью лет уж и не упомню, что :( Словом, берите, разбирайтесь, меняйте...