/* B E S C H R E I B U N G

Wer gewinnt das NimmSpiel?


I) Regeln

------ 
(0,-1)

------ 
(1,1)

------
(2,1)

{(a-1,w1), (a-2,w2), (a-3,w3)}
-------------------------------------- 
       (a, -min(w1,w2,w3))
 

Man kann dies durch Iteration oder Rekursion lösen.
Hier wird die rekursive Lösung vorgestellt.
*/

#include "stdafx.h"
int negMin(int z1, int z2, int z3);
int N(int anz);

int main(){
	int erg;
	int i;

	for(i=0;i<20; i++){
		erg = N(i);
		printf("i= %d  erg =%d \n", i, erg);
	}

	return 0;
}

/****************************************************************************/
/**																	       **/
/**  int negMin(int z1, int z2, int z3)                                    **/
/**																	       **/
/****************************************************************************/
/*
  Parameter:
    (i) int z1: 1. Zahl
    (i) int z2: 2. Zahl
    (i) int z3: 3. Zahl
	
  return:
    berechnet das Minimum der 3 Zahlen z1.z2.z3 
    und gibt davon den negativen Wert zurück.

  
  Beschreibung:
    Berechnet: - Minimum(z1,z2,z3)
*/

int negMin(int z1, int z2, int z3){
	int min;
	if(z1<z2)
		min=z1;
	else
		min=z2;
	if(z3<min)
		min=z3;
	return -min;
}

/****************************************************************************/
/**																	       **/
/**  int N(int anz)                                                        **/
/**																	       **/
/****************************************************************************/
/*
  Parameter:
    (i) int anz): Anzahl Streichhölzer

	
  return:
    1: anziehende Spieler gewinnt.
    0: anziehende Spieler verliert.
  
  Beschreibung:
    Berechnet, ob der Anziehende Spieler gewinnt bzw. verliert.
	Vorausgesetzt wird, daß sowohl der anziehende und der nachziehende 
	Spieler jeweils den "optimalen" Zug machen, bzw. optimal spielen.
*/

int N(int anz){
	int maxGewinn;
	if (anz==0)
		maxGewinn = -1;
	else if(anz==1)
		maxGewinn = 1;
	else if(anz==2)
		maxGewinn = 1;
	else{ 
		maxGewinn=negMin(N(anz-3), N(anz-2), N(anz-1));
	}
	return maxGewinn;
}

