Advanced Java
Services
|
JAVA-Praktikum |
|
|
Der König und seine Gefangenen (Lösung) |
|
public class Koenig1
{
public static void main(String[] args)
{
boolean[] tuer = new boolean[100] ;
// false = tür geschlossen
/*
idee :
//alle türen öffnen
for(int i=0; i<tuer.length; i++)
tuer[i] = true ;
//jede zweite türe schließen ( offen, zu, offen, zu,...)
for(int i=1; i<tuer.length; i+=2)
tuer[i] = false ;
//jede dritte türe öffnen
for(int i=2; i<tuer.length; i+=3)
tuer[i] = true ;
idee verallgemeinern:
*/
// k=0 öffnen, k=1 schließen, k=2 öffnen, k...
for(int k=0; k<tuer.length; k++)
{
for(int i=k; i<tuer.length; i+=k+1)
tuer[i] = k%2==0 ? true : false ;
}
int count=0;
for(int i=0; i<tuer.length; i++)
if(tuer[i])
{
count++;
System.out.println(i+1);
}
System.out.println("offene Tueren : "+count);
}
}
// zweite Variante
public class Koenig2
{
public static void main(String[] args)
{
boolean[] tuer = new boolean[100] ;
// false = tür geschlossen
/*
idee:
//alle türen öffnen
for(int i=0; i<tuer.length; i++)
tuer[i] = true ;
//tuer[i] = !tuer[i]; geht auch
//jede zweite türe schließen ( offen, zu, offen, zu,...)
for(int i=1; i<tuer.length; i+=2)
tuer[i] = false ;
//tuer[i] = !tuer[i]; geht auch
//jede dritte türe öffnen, wenn geschlossen und umgekehrt
for(int i=2; i<tuer.length; i+=3)
tuer[i] = !tuer[i];
//jede vierte türe öffnen, wenn geschlossen und umgekehrt
for(int i=3; i<tuer.length; i+=4)
tuer[i] = !tuer[i];
Idee verallgemeinern:
*/
//jede k-te türe öffnen, wenn geschlossen und umgekehrt
for(int k=0; k<tuer.length; k++)
{
for(int i=k; i<tuer.length; i+=k+1)
tuer[i] = !tuer[i] ;
}
int count=0;
for(int i=0; i<tuer.length; i++)
if(tuer[i])
{
count++;
System.out.println(i+1);
}
System.out.println("offene Tueren : "+count);
}
}