#include <stdio.h>
#include <stdlib.h>



void randomizeCases(int *currentCase,int *caseValue);
int mean(int *currentCase);

main(){
    int suitCaseValue[26] = {1,100,500,1000,2500,5000,7500,10000,20000,30000,40000,50000,75000,100000,500000,1000000,2500000,5000000,7500000,10000000,20000000,30000000,40000000,50000000,75000000,100000000};
    int currentSuitCase[26];    //suit cases in current round
    int game,round;
    long long winnings;
    int initialMean;
    int i;
    
    FILE * fp;
    
    fp = fopen("out.txt","w");
    
    winnings=0;
    
    srand(time(0));           //set the state of the random number generator
    
    randomizeCases(currentSuitCase,suitCaseValue);
    initialMean=mean(suitCaseValue);
    
    fprintf(fp,"All values are in cents\n\nSuit case values:\n");
    
    for(i=0;i<26;i++)
            fprintf(fp,"%d\n",suitCaseValue[i]);
           
    fprintf(fp,"\nInitial Mean: %d\n",initialMean);
    
    for(game=0;game<10000;game++){
        fprintf(fp,"\nGame: %d\n",game);
        randomizeCases(currentSuitCase,suitCaseValue);     //randomly order the suitcases
        for(round=0;round<25;round++){
            fprintf(fp,"Opened suit case worth %d\n",currentSuitCase[round]);
            currentSuitCase[round]=0;                       //open the next suit case     
            if(mean(currentSuitCase)>initialMean){          //take the deal if it's better than the initial expected value
                winnings+=mean(currentSuitCase);    
                fprintf(fp,"Deal: %d Total: %g\n",mean(currentSuitCase),(double)winnings);        
                break;
            }
            fprintf(fp,"No deal: %d / %d\n",mean(currentSuitCase),initialMean);
        }
        if(round==25){                        //no deal was made - collect the money in the last suit case
            winnings+=currentSuitCase[25];                    
            fprintf(fp,"Suit Case Kept: %d Total %g\n",currentSuitCase[25],(double)winnings);
        }
    }
    
    fprintf(fp,"\nNet winnings:     %g\n",(double)winnings);
    fprintf(fp,"Average winnings: %d\n",winnings/game);
    fprintf(fp,"Initial mean:     %d\n",initialMean);
    
    fclose(fp);
    system("PAUSE");
}

void randomizeCases(int *currentCase,int *caseValue){
    int i,j;
    int assigned[26];               //indicates whether value has been assigned to a suit case
    for(i=0;i<26;i++){              //reset arrays
        assigned[i]=0;
        currentCase[i]=0;
    }
    for(i=0;i<26;i++){
        while(currentCase[i]==0){
            j=(float)rand()/RAND_MAX*26;
            if(!assigned[j]){       
                currentCase[i]=caseValue[j];
                assigned[j]=1;
            }
        }
    }
}

int mean(int *currentCase){
    int i,j,sum;
    sum=0;
    j=0;
    for(i=0;i<26;i++){
        sum+=currentCase[i];
        if(currentCase[i]>0)
            j++;
    }
    return(sum/j);
}
