Envié una edición a sus detalles que, creo, aclara su pregunta. El “1” elegido por A debe ser “-1”.
Entonces, si leo el juego correctamente, dos jugadores se turnan para seleccionar
- El primer número en el conjunto, o
- El último número en el conjunto, o
- Los dos primeros números del conjunto, o
- Los dos últimos números del conjunto.
El objetivo es ser el jugador con la suma más alta cuando se consumen todos los números.
De esto, se deduce que sus jugadores A y B tomaron los siguientes turnos:
- Cómo probar [matemáticas] 2 \ sqrt {n} – \ sqrt {n + 1} – \ sqrt {n-1} \ approx \ frac {1} {4n \ sqrt {n}} [/ matemáticas]
- Cómo resolver este cryptarithim
- ¿Puedo usar los términos ‘algoritmo’ y ‘método numérico’ de manera intercambiable?
- Cómo colocar rayos en los bordes de un polígono para que apunten
- ¿Qué es el crecimiento logarítmico en notación asintótica?
- A escogió el último número del conjunto, -1 [si la corrección es … correcta], por una suma de 9.
- B eligió los dos últimos números del conjunto, 6 y 3, por una suma de 9.
- A escogió el último número del conjunto, 5, por una suma de 4.
- B toma el último número restante, -11, por una suma de -2.
- A gana.
Realmente no hay mucho en el “algoritmo”. El juego consiste en que dos jugadores se turnan para elegir los números de un conjunto de números. El algoritmo es que la suma de cada jugador se acumula en el conjunto de turnos. El juego termina simplemente cuando el conjunto de números está agotado.
Para hacer eso en C, simplemente necesitarías:
- Un conjunto de enteros [¿quizás incluso una entrada basada en un tamaño variable del usuario?]. Rellena esto al azar con enteros positivos / negativos.
- Una suma entera para cada jugador.
- Una función de visualización que muestra el conjunto actual de números disponibles para elegir, ordenados de la manera que es obvio para los jugadores cuál es el primero / el último.
- Una función de entrada que permite a los jugadores seleccionar uno de los cuatro movimientos posibles.
- Una función de ‘algoritmo’ que extrae los números seleccionados del jugador de la matriz y los agrega a la suma de los jugadores.
En codigo:
#include
#include
#include
// uso: game
int setSize = 0;
int * set = NULL;
int * workingSet = NULL;
int jugadores = 0;
int * playerSum = NULL;
int techo = 0;
void displaySet ()
{
int i;
printf (“conjunto actual: \ n”);
para (i = 0; i <setSize; i ++)
{
printf (“% d \ n”, workingSet [i]);
}
}
void displayStats ()
{
int i;
printf (“estadísticas actuales: \ n”);
para (i = 0; i <jugadores; i ++)
{
printf (“% d:% d \ n”, i, playerSum [i]);
}
}
void playerPick (int jugador)
{
int c;
para (;;)
{
printf (“pick 1) first, 2) first two, 3) last two o 4) last: \ n”);
c = fgetc (stdin);
if (c> = ‘1’ && c <= '4')
{
rotura;
}
}
si (c ‘4’)
{
printf (“bomba aquí porque simplemente no me importa … \ n”);
salida (-2);
}
si (c == ‘1’)
{
playerSum [jugador] + = workingSet [0];
// ‘liberar’ el primer número
workingSet ++;
setSize–;
}
más si (c == ‘2’)
{
playerSum [jugador] + = workingSet [0];
playerSum [jugador] + = workingSet [1];
// ‘liberar’ los dos primeros números
workingSet + = 2;
setSize – = 2;
}
si no (c == ‘3’)
{
playerSum [jugador] + = workingSet [setSize-1];
playerSum [jugador] + = workingSet [setSize-2];
// ‘liberar’ los dos últimos números
setSize – = 2;
}
más si (c == ‘4’)
{
playerSum [jugador] + = workingSet [setSize-1];
// ‘liberar’ el último número
setSize–;
}
}
int main (int argc, char ** argv)
{
int currentPlayer = 0;
tiempo_t t;
int i;
si (argc! = 4)
{
printf (“uso: game \ n”);
volver -1;
}
jugadores = atoi (argv [1]);
setSize = atoi (argv [2]);
techo = atoi (argv [3]);
if (jugadores && setSize && ceiling)
{
playerSum = calloc (players, sizeof (int));
set = calloc (setSize, sizeof (int));
if (playerSum && set)
{
srand ((sin signo) tiempo (& t));
para (i = 0; i <setSize; i ++)
{
set [i] = (rand ()% (techo * 2)) – techo;
}
workingSet = set;
hacer
{
displaySet ();
playerPick (jugador actual);
displayStats ();
currentPlayer ++;
currentPlayer% = jugadores;
} while (setSize> 0);
}
}
más
{
printf (“los jugadores deben ser> 0, el tamaño del set debe ser> 0 y el techo debe ser> 0 \ n”);
volver -1;
}
devuelve 0;
}