Quote Originariamente inviata da torn24 Visualizza il messaggio
Ciao, una soluzione da implementare "realizzare col codice"

1) dividi numero partite per numero giocatori, e trovi quante partite massime può fare un giocatore
2) Ti crei un array dome memorizzi il sorteggio PartiteGiocatori[] inizializzato a zero
Short PartiteGiocatori[MAXGIOCATORI]={0};

3) Ad ogni numero estratto verifichi che il giocatore ha giocato meno partite del massimo, e incrementi di uno

if(PartiteGiocatori[indice]<massimoPartite)
esegui....
Ciao, ho seguito le tue istruzioni sul programma, ma mi sono inceppato in un dilemma. Ho creato il controllo sulla ripetizione in una partita e funziona. Invece la ripetizione di un giocatore su tutte le partite è diventata un grosso problema, mi sa che sto sbagliando ragionamento: più che altro nel quando incrementare "partitegiocatori[y]. Potresti dare un'occhiata veloce al programma e indicarmi dov'è che sbaglio e dove dovrei mettere quell'incremento? Grazie, o in generale se qualcuno riesce a trovare una soluzione al mio problema

codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define MAX 32

int main(){
    int i, j, p, k, N, y, partitemax;
    char s[MAX];
    srand(time(NULL));
    do {
        printf("Inserire numero giocatori: ");
        gets(s);
        N = atoi(s);
        if (N < 4 || N > MAX)
            printf("Valore errato: deve essere tra 4 e %d\n", MAX);
    } while (N < 4 || N > MAX);
    short partitegiocatori[N];
    for (i = 0; i < N; i++) {
        partitegiocatori[i] = 0;
    }
    char player[N][MAX];
    for (i = 0; i < N; i++) {
        printf("Giocatore %d: ", i+1);
        gets(s);
        if (strlen(s) == 0) {
            printf("Nessun giocatore specificato - ripeti\n");
            i--;
        }
    else
        strcpy(player[i], s);
    }
    printf("\nInserire numero partite totali: ");
    scanf("%d", &p);
    partitemax = p / N;
    printf("Per un gioco totalmente equilibrato saranno giocate %d partite", partitemax*N);
    for (i = 0; i < (partitemax*N); i++) {
        char a[4][MAX];
        for (j = 0; j < 4; j++) {
            y = (0 + rand() % N);
            if (partitegiocatori[y] < partitemax) {
            strcpy(a[j],player[y]);
            for (k = j-1; k >= 0; k--) {
                if (strcmp(a[k], a[j]) == 0)
                    j--;
                else
                    partitegiocatori[y]++;
                }
            }
        }
        printf("\n %s - %s VS %s - %s", a[0], a[1], a[2], a[3]);
    }
    return 0;
}