// project created on 23.01.2006 at 15:02
using System;

class MainClass
{
    const int MAX_CD_TITEL = 100;

    public static void Main(string[] args)
    {
    Console.Write("Wie viele Titel hat die CD: ");

    //ohne Netz & doppelten Boden:
    int nTitelAnzahl =  Convert.ToInt32(Console.ReadLine());
    
    int nBrute = BruteForceShuffle (nTitelAnzahl);
    Console.WriteLine();
    int nKewl  = KewlGallShuffle (nTitelAnzahl);
    Console.WriteLine();

    Console.WriteLine("Brute Force: Ziel erriecht mit {0} Runden", nBrute); 
    Console.WriteLine("GallTec: Ziel erriecht mit {0} Runden", nKewl);  

    }

/*******************************************************************/

    public static int BruteForceShuffle (int nTitelAnzahl)
        {
        int[] anTitel = new int[nTitelAnzahl];

        //einen zufälligen Titel-Index auswählen
        int nZufallsIndex, nRunden = 0;

        // Tracks initialisieren
        for (int i = 0; i < nTitelAnzahl; i++)
            {
            anTitel[i] = i+1;
            }

        //NIE innerhalb einer Schleife deklarieren!
        Random rndGen = new Random();
        
        for (int i = 0; i < nTitelAnzahl; i++)
            {
            // so lange Zufallsindzes berechnen, bis wir KEINE Null treffen.
            do
                {
                nRunden++;
                nZufallsIndex = rndGen.Next(nTitelAnzahl);
                }
            while (anTitel[nZufallsIndex] == 0);
            
            Console.WriteLine("Nummer {0} ist Titel {1}", i+1, anTitel[nZufallsIndex]);
            anTitel[nZufallsIndex] = 0;
            }
        return nRunden;         
        }

/*******************************************************************/

    public static int KewlGallShuffle (int nTitelAnzahl)
        {
        int[] anTitel = new int[nTitelAnzahl];
        int nRunden = 0;
        
        // Tracks initialisieren
        for (int i = 0; i < nTitelAnzahl; i++)
            {
            anTitel[i] = i+1;
            }

        //NIE innerhalb einer Schleife deklarieren!
        Random rndGen = new Random();
        
        for (int i = 0; i < nTitelAnzahl; i++)
            {
            nRunden++;
            int nZufallsIndex = rndGen.Next(nTitelAnzahl - i);
            
            Console.WriteLine("Nummer {0} ist Titel {1}", i+1, anTitel[nZufallsIndex]);
            anTitel[nZufallsIndex] = anTitel[nTitelAnzahl - 1 - i];
            }

        return nRunden;
        }
} // class

syntax highlighted by Code2HTML, v. 0.9.1