ArrayExamples

public class ArrayExamples

{

    public static int lockers (int students)

    {

        /** Assume we have 1 locker per student.

        * As each student N passes, he toggles

        * every Nth locker, starting with first.

        * Even # = open, odd # = closed

        *

        * Return # of open lockers at end.

        */

       

       int lockers[] = new int[students];

       

       // Initialize lockers to open

        for (int i = 0; i < lockers.length; i += 1)

        {

            lockers[i] = 0;

        }

        

        for (int round = 1; round <= students; round += 1)

        {

            // For each student, open every matching

            // locker

            

            for (int currLocker = 0;

                 currLocker < lockers.length;

                 currLocker += round)

            {

                // System.out.println("Student " + round + " toggles locker " + currLocker);

                lockers[currLocker] += 1;

            }

        }

        

        // Count # of lockers still open

        int openLockers = 0;

        

        for (int counter = 0; counter < lockers.length; counter += 1)

        {

            if (lockers[counter] % 2 == 0) // even

                openLockers += 1;

        }

        

        return openLockers;

    }

    

    public static void magicSquare (int size)

    {

        // Algorithm: put 1 in top center square.

        // Repeatedly move up and to the left,

        // wrapping around edges as necessary.

        // If we hit an occupied square, go down

        // from previous instead

        

        int [] [] square = new int [size][size];

        

        int row = 0; // Start at top row

        int col = size / 2; // Start in middle

        

        int n = 1;

        

        while (n <= size * size)

        {

            // Fill in next square

            square[row][col] = n;

            n++;

            

            // Check for collisions

            int tempRow = row - 1;

            int tempCol = col - 1;

            

            if (tempRow < 0)

                tempRow = size - 1;

            if (tempCol < 0)

                tempCol = size -1;

            

            if (square[tempRow][tempCol] != 0)

            {

                tempRow = row + 1;

                tempCol = col;

                if (tempRow >= size)

                    tempRow = 0;

            }

            

            row = tempRow;

            col = tempCol;

        }

        

        

        // Print square at end

        for (int i = 0; i < square.length; i++)

        {

            for (int j = 0; j < square.length; j++)

            {

                System.out.print(square[i][j] + "\t");

            }

            System.out.println();

        }

    }

}

This page was last modified on 8/25/09