public class Koenig1
{
static void Main(string[] args)
{
bool[] tuer = new bool[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++;
Console.WriteLine(i+1);
}
Console.WriteLine("offene Tueren : "+count);
} // end Main
}
// zweite Variante
public class Koenig2
{
static void Main(string[] args)
{
bool[] tuer = new bool[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++;
Console.WriteLine(i+1);
}
Console.WriteLine("offene Tueren : "+count);
} // end Main
}