Я делаю мини-проект для школы, игра состоит из четного набора чашек, X, каждая с бобами x1, x2, ... внутри каждой чашки.Есть два игрока, Белла и Алекс.Алекс всегда берет чашку с большим количеством бобов.Белла в своей первой игре берет ту с меньшим количеством бобов, вторая играет с чашкой с большим количеством бобов, третья с меньшим количеством бобов и так далее ... Они могут просто взять первую или последнюю чашку сета.Алекс всегда начинается первым.Тот, кто выиграет больше всех бобов, выиграет.
For Example: X = 4, with x1 = 1, x2 = 2, x3 = 3, x4 = 4.
Alex takes x4, A = 4.
-> X = 3, with x1 = 1, x2 = 2, x3 = 3.
Bella takes x1 = 1, B = 1. (first play, takes the smallest)
-> X = 2, with x1 = 2, x2 = 3.
Alex takes x2, A = 4 +3 = 7.
-> X = 1, with x1 = 2.
Bella takes x1, B = 1+2 = 3.
Итак, Алекс выигрывает с 7 бобами против 3 бинов Беллы.
У меня есть код, все хорошо, но во второй игре Алексаон получает 8 вместо 7. Вы можете мне помочь?Montinhos [] представляет массив x1, x2, x3, x4 ...
Спасибо.PS - опция gcc: gcc -std = c99 -Wall $ file -lm
#include <stdio.h>
int i, j, z, n, A, B, jogada = 1;
void alex(int *n, int montinhos[]);
void bella(int *n, int montinhos[]);
int main(void)
{
do
{
printf("Number of cups: ");
scanf("%d", &n);
} while(n < 2 || n > 100 || n % 2 != 0);
int montinhos[n];
for (i = 0; i < n; ++i)
scanf("%d", &montinhos[i]);
for (j = 0; j < n / 2; ++j)
{ //play while there are cups
alex(&n, montinhos);
printf("Temp Alex %d\n", A);
bella(&n, montinhos);
printf("Temp Bella %d\n", B);
}
if (A > B)
{
printf("Alex wins with %d against %d\n", A, B);
}
else if (B < A)
{
printf("Bella wins with %d against %d\n", B, A);
}
else
{
printf("Alex e Bella tie with %d\n", A);
}
return 0;
}
void bella(int *n, int montinhos[])
{
if (*n==1) //if there's only 1 cup
{
B += montinhos[0];
*n--;
}
else if (jogada % 2 != 0) //first/uneven play - takes the smallest cup
{
if(montinhos[0] < montinhos[*n - 1])
{
B += montinhos[0];
for (z = 0; z < *n - 1; ++z)
montinhos[z] = montinhos[z+1];
*n--;
}
else if(montinhos[0] > montinhos[*n - 1])
{
B += montinhos[*n - 1];
for (z = *n - 1; z < *n - 1; ++z)
montinhos[z] = montinhos[z+1];
*n--;
}
}
else //if second/.../even play, takes the biggest cup
{
if(montinhos[0] > montinhos[*n - 1])
{
B += montinhos[0];
for (z = 0; z < *n - 1; ++z)
montinhos[z] = montinhos[z+1];
*n--;
}
else if(montinhos[0] < montinhos[*n - 1])
{
B += montinhos[*n - 1];
for (z = *n - 1; z < *n - 1; ++z)
montinhos[z] = montinhos[z+1];
*n--;
}
}
}
void alex(int *n, int montinhos[])
{
//if left cup is bigger
if(montinhos[0] > montinhos[*n - 1])
{
A += montinhos[0];
for (z = 0; z < *n - 1; ++z)
montinhos[z] = montinhos[z+1];
*n--;
}
else if (montinhos[0] < montinhos[*n - 1])
{
A += montinhos[*n - 1];
for (z = *n - 1; z < *n - 1; ++z)
montinhos[z] = montinhos[z+1];
*n--;
}
}