#include using namespace std; int stapel[3]; //Controleer of er precies 1 stapel is met een waarde lager dan 2 //Begin standaard met true en controleer op foute waardes bool afgelopen() { bool einde = true; int stapelsMetWaarde = 0; int totaalWaarde = 0; for( int ctr=0; ctr < 3; ctr++ ) { if( stapel[ctr] > 0 ) { totaalWaarde = totaalWaarde + stapel[ctr]; stapelsMetWaarde++; if( (totaalWaarde > 2) or (stapelsMetWaarde > 1) ) { einde = false; break; } //end if } //end if not 0 } //end loop return(einde); } //Controleer of een pad zeker winnend is bool winstRecur( bool aanBeurt ) { bool winst1 = false; bool winst2 = false; aanBeurt = not(aanBeurt); if( afgelopen() ) { if( aanBeurt ) { return(true); } else { return(false); } } else { for( int ctr=0; ctr < 3; ctr++ ) { if( stapel[ctr] > 0 ) { if( stapel[ctr] > 1 ) { stapel[ctr] = stapel[ctr] - 2; winst2 = winstRecur( aanBeurt ); stapel[ctr] = stapel[ctr] + 2; } //end if (test met 2) stapel[ctr] = stapel[ctr] - 1; winst1 = winstRecur( aanBeurt ); stapel[ctr] = stapel[ctr] + 1; } //end if (groter dan 0) if( winst1 & winst2 ) { return(true); } //end if (winst test) } //end for loop return(false); } } //Deze functie creert alle mogelijk vervolg zetten, en test deze op //winnend void winnend( int & stapelNummer, int & aantal ) { bool winst; for( int ctr=0; ctr < 3; ctr++ ) { if( stapel[ctr] > 0 ) { if( stapel[ctr] > 1) { stapel[ctr] = stapel[ctr] - 2; winst = winstRecur( "false" ); stapel[ctr] = stapel[ctr] + 2; if( winst ) { stapelNummer = ctr; aantal = 2; return; } //winst 2 } stapel[ctr] = stapel[ctr] - 1; winst = winstRecur( "false" ); stapel[ctr] = stapel[ctr] + 1; if( winst ) { stapelNummer = ctr; aantal = 1; return; } //winst 1 } //not null } //loop for stapelNummer = -1; aantal = -1; } //end winnnend int main() { stapel[0] = 4; stapel[1] = 0; stapel[2] = 0; int a, t; winnend(a,t); cout << a << " " << t; }