Visualizzazione dei risultati da 1 a 10 su 11

Visualizzazione discussione

  1. #7
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    Ciao

    Ciao. premetto che capire il codice di un altro può risultare più complicato che inventarsi una propria
    soluzione, perché bisogna capire il ragionamento, l'idea di un altra persona.

    Ti propongo una piccola modifica al codice, non ho provato e non so se funziona, ma potresti prendere ugualmente spunto per una soluzione...


    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++) 
                  a[j][0]='\0';
            int flag=0;
            int estratto=0;
            for (j = 0; j < 4; j++) { //Ripete per 4 giocatori
                
                do{ // Ripete finché non viene estratto un numero valido
                    y = (0 + rand() % N);
                    for (k = 0; k < 4; k++) { //Verifica che non sia ripetuto nei 4 giocatori
                        if (K!=J && strcmp(a[k], a[j]) == 0){
                             estratto=1;
                             break;
                        }
                        else
                             estratto=0;
                    }
                    if(estratto==0 && partitegiocatori[y] < partitemax){
                          partitegiocatori[y]++;
                          strcpy(a[j],player[y]);
                          flag=1; // esce dal do while, il numero estratto è valido
                    }
                    else{
                        continue; // se il numero non è valido perché ha superato partitemax o perché il giocatore è gia estratto
                    }
                
                    
                }while(flag==0);
                flag=0; // metto di nuovo a zero per il prossimo giocatore del for()
            }
            printf("\n %s - %s VS %s - %s", a[0], a[1], a[2], a[3]);
        }
        return 0;
    }
    Ultima modifica di torn24; 11-05-2017 a 07:58
    Tecnologia

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.