C# - "Elimineren van elementen in een array"

Status
Niet open voor verdere reacties.

Tycho89

Nieuwe gebruiker
Lid geworden
10 nov 2010
Berichten
2
Hallo,

Ik ben bezig met een opdrachtje voor school, en kom er niet helemaal uit. Ik hoop dat iemand mij hiermee kan helpen. Het gaat om het volgende:

Er is een groep met een x aantal personen (ik heb voor het gemak maar even een vaste value genomen, namelijk 5). Deze personen krijgen een woord toegewezen, dat bestaat uit een y aantal lettergrepen. Ze moeten om de beurt één lettergreep van het woord noemen. Degene die de laatste lettergreep zegt, valt af en wordt verwijderd van de groep. Dit gaat zo lang door, totdat er één persoon overblijft.

(voor de duidelijkheid: uiteindelijk moeten het aantal personen en het aantal lettergrepen van het woord ingevuld worden in de console)

Even een voorbeeld ter verduidelijking. Neem 5 personen en een woord met 2 lettergrepen (bv. Hallo).

De 1e persoon zegt "Hal", de 2e persoon "lo". Dus de 2e persoon wordt uit de groep gezet.

Daarna zegt de 3e persoon weer "Hal" en de 4e persoon "lo". Dus de 4e persoon gaat er ook uit.

Daarna zegt de 5e persoon weer "Hal" en de 1e persoon "lo". Dus de 1e persoon gaat er ook uit.

Tot slot zegt de 3e persoon weer "Hal" en de 5e persoon "lo". Dus de 5e persoon gaat er ook uit.

De 3e persoon blijft over en "wint".


Nu ben ik zover gekomen dat mijn code werkt voor een groep van 5 personen en een woord met 8 lettergrepen. Maar het moet werken voor een groep van x personen en een woord met y lettergrepen.

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Win_a_Mars
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList lijst = new ArrayList();

            //5 personen
            var personen = from x in Enumerable.Range(1, 5) select x;
            foreach (int val in personen)
                lijst.Add(val);

            foreach (int val in lijst)
                Console.Write(val + " ");
            Console.WriteLine();
            Console.ReadLine();

            //aantal lettergrepen
            int lG = 8;

            //variabele voor de positie in de array
            int y = 0;

            //elementen in de lijst elimineren
            while (lijst.Count > 1)
            {
                y += (lG % lijst.Count) - 1;

                if (y >= 0 && y < lijst.Count)
                    lijst.RemoveAt(y);

                if (y > lijst.Count)
                    lijst.RemoveAt(y % lijst.Count);

                if (y < 0)
                    lijst.RemoveAt(lijst.Count + y);
                
                foreach (int val in lijst)
                    Console.Write(val + " ");
                Console.WriteLine();
                Console.ReadLine();
            }
            
            Console.ReadLine();
        }
    }
}


Als ik in deze code bijvoorbeeld 5 personen hou, en ik kies een woord met 9 lettergrepen, dan blijven uiteindelijk 1 en 2 over, en kan er geen keuze gemaakt worden.

Heeft iemand een idee hoe dit programma wel goed zou werken?
 
Hallo,

Het is al gelukt. Bleek dat ik weer veel te moeilijk zat te denken..
Voor degene die benieuwd zijn, staat hieronder de code:

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Win_a_Mars
{
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList lijst = new ArrayList();

            Console.WriteLine("Hoeveel personen zijn er?");
            int textInput = Convert.ToInt32(Console.ReadLine());

            Console.WriteLine("Hoeveel lettergrepen heeft het woord?");
            int textInput2 = Convert.ToInt32(Console.ReadLine());

            //aantal personen
            for (int i = 0; i < textInput; i++)
                lijst.Add(i + 1);

            foreach (int val in lijst)
                Console.Write(val + "  ");
            Console.WriteLine();
            Console.ReadLine();

            int lijstTot = textInput;

            //aantal lettergrepen
            int lG = textInput2;

            //variabele voor het stacken van de modulo
            int y = 0;

            //elementen in de lijst elimineren
            while (lijst.Count > 1)
            {
                y += lG - 1; //stel 5 personen, 5 lettergrepen; dan is y = 4 % 5. Dus remove at 4.
                y = y % lijst.Count;

                lijst.RemoveAt(y);

                foreach (int val in lijst)
                    Console.Write(val + "  ");
                Console.WriteLine();
                Console.ReadLine();
            }

            Console.ReadLine();
        }
    }
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan