私はこのためのアルゴリズムを書き込もうとしています。100人の学生と100人のロッカーがいます。最初の生徒は最初のロッカーから始めて、すべてのロッカーを開きます。次の生徒である生徒2は、2番目のロッカーから開始し、開いている場合は1つおきにロッカーを閉じます。その逆も同様です。3番目の生徒は3番目のロッカーから始め、3番目のロッカーごとにこのプロセスを繰り返します。動作するはずの何かを書きましたが、配列が範囲外になり、その方法がわかりません。
public static void main(String[] args)
{
int startingStudents = 1;
int lockersToCheck = 1;
int lockersPosition = 1;
boolean[] lockers = new boolean[101];
//Cycles through 100 students
for(int students = startingStudents; startingStudents <= 100; students++)
{
//What each student does
while(lockersToCheck <= 100)
{
//If its closed, open
if(lockers[lockersToCheck] == false)
{
lockers[lockersToCheck] = true;
}
//If its open, close
else
{
lockers[lockersToCheck] = false;
}
//Which locker they should be at
lockersToCheck += lockersPosition;
}
//Zero out to start at the right locker
lockersToCheck = 0;
//Where the next student starts
lockersPosition += students;
//Make sure the next student starts there
lockersToCheck = lockersPosition;
}
for(int n = 1; n <= 100; n++)
{
System.out.print(lockers[n] + " " + n);
}
}
助けてくれてありがとう!