[c] Josephusproblem

snuffnick

Cadet 2nd Year
Registriert
Juli 2005
Beiträge
22
Hallo!

Ich schreibe an einem Programm das dass Josephusproblem beschreibt.
Ich habe in diesem Programm einen Fehler weiß aber leider nicht woran das
liegen kann.

Das Josephusproblem lautet folgendermaßen:

Eine Anzahl von Soldaten in diesem Fall 9 steht im Kreis. Es solle eine Auszählung gemacht werden.
Begonnen wird bei einem willkürlich gewählten Soldaten bei mir als Beispiel mit der 3.
Als nächstes wird eine zufällig gewählte zahl genommen bei mir ist es die 5. Nun zählt man im Kreis. Begonnen bei 3 wird 5 weitergezählt und somit fliegt die 8 raus. Und so weiter...

Die Soldaten sollten nach dieser Reihenfolge raus fallen:

8 ; 4 ; 1 ; 7; 6; 9 ; 3; 2;

Der verbleibende ist der Soldat 2.

Bei meinem Programm kommt am Ende wohl die 2 raus. Aber das ist wohl nur Zufall.
Ich weiß leider nicht was ich falsch mache.
Ich hoffe mir kann da jemand helfen.

Danke

Gruß
Snuff Nick

Code:
#include <cstdlib>
#include <iostream>
#include <stdio.h>

main()
{
int d, raus, k, anzahl, start, zufall , i, j, soldat[100]={0};

anzahl=9;

j=1;
for (i=1; i<=anzahl; i=i+1)
{ 
soldat[i]=j;
j++;
}

start=3;
zufall=5;

raus = start+zufall;
d=1;

while (anzahl > 1)
{    
     if(raus>anzahl)
	 {
		raus=raus-(anzahl+1);
	 }
	
        for(k=raus;k<anzahl;k=k+1)
        {                                              
        soldat[k]=soldat[k+1];
        }
    
            
printf("\n%d Durchlauf\n",d);
            for (i=1; i<anzahl; i=i+1)
            {  
            printf("\n\t\t%d\n",soldat[i]);
            }
d=d+1;
raus = raus+zufall;
anzahl=anzahl-1;
printf("\n");
system("PAUSE");
}

printf("\n\ngewinner=\t%d",soldat[1]);
printf("\n\n");

   system("PAUSE");
}
 
Zurück
Oben