05. FELADAT · FORRÁSKÓD

Osztályképviselő-választás

Program.cs letöltése
namespace Feladat05_Valasztas
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("=== Osztályképviselő-választás – szavazatszámlálás ===");
            Console.WriteLine($"1 - {JeloltNeve(1)}");
            Console.WriteLine($"2 - {JeloltNeve(2)}");
            Console.WriteLine($"3 - {JeloltNeve(3)}");
            Console.WriteLine();

            Console.Write("Hány szavazólapot adtak le? ");
            int szavazolapok = int.Parse(Console.ReadLine());

            int elsoJelolt = 0;
            int masodikJelolt = 0;
            int harmadikJelolt = 0;
            int ervenytelen = 0;

            for (int i = 1; i <= szavazolapok; i++)
            {
                Console.Write($"{i}. szavazólap: ");
                int szavazat = int.Parse(Console.ReadLine());

                switch (szavazat)
                {
                    case 1: elsoJelolt++; break;
                    case 2: masodikJelolt++; break;
                    case 3: harmadikJelolt++; break;
                    default: ervenytelen++; break;
                }
            }

            int ervenyes = elsoJelolt + masodikJelolt + harmadikJelolt;

            Console.WriteLine();
            Console.WriteLine("--- Eredmény ---");

            if (ervenyes == 0)
            {
                // Arányt nem tudunk számolni, de a darabszámok ilyenkor is érdekesek.
                Console.WriteLine($"Érvénytelen szavazatok: {ervenytelen} db");
                Console.WriteLine($"Érvényes szavazatok száma: {ervenyes} db");
                Console.WriteLine("Nem érkezett egyetlen érvényes szavazat sem, a választás eredménytelen.");
            }
            else
            {
                Kiiras(JeloltNeve(1), elsoJelolt, ervenyes);
                Kiiras(JeloltNeve(2), masodikJelolt, ervenyes);
                Kiiras(JeloltNeve(3), harmadikJelolt, ervenyes);
                Console.WriteLine($"Érvénytelen szavazatok: {ervenytelen} db");
                Console.WriteLine($"Érvényes szavazatok száma: {ervenyes} db");

                int legtobb = elsoJelolt;
                if (masodikJelolt > legtobb) legtobb = masodikJelolt;
                if (harmadikJelolt > legtobb) legtobb = harmadikJelolt;

                int nyertesekSzama = 0;
                if (elsoJelolt == legtobb) nyertesekSzama++;
                if (masodikJelolt == legtobb) nyertesekSzama++;
                if (harmadikJelolt == legtobb) nyertesekSzama++;

                Console.WriteLine();

                if (nyertesekSzama > 1)
                {
                    Console.WriteLine($"Holtverseny alakult ki {legtobb} szavazattal a következő jelöltek között:");
                    if (elsoJelolt == legtobb) Console.WriteLine($"- {JeloltNeve(1)}");
                    if (masodikJelolt == legtobb) Console.WriteLine($"- {JeloltNeve(2)}");
                    if (harmadikJelolt == legtobb) Console.WriteLine($"- {JeloltNeve(3)}");
                    Console.WriteLine("Második fordulóra van szükség.");
                }
                else
                {
                    string gyoztes;
                    if (elsoJelolt == legtobb) gyoztes = JeloltNeve(1);
                    else if (masodikJelolt == legtobb) gyoztes = JeloltNeve(2);
                    else gyoztes = JeloltNeve(3);

                    Console.WriteLine($"A választás győztese: {gyoztes} ({legtobb} szavazat)");

                    // Abszolút többség: az érvényes szavazatok több mint a fele.
                    if (legtobb * 2 > ervenyes)
                    {
                        Console.WriteLine("A győztes abszolút többséget szerzett.");
                    }
                    else
                    {
                        Console.WriteLine("A győztes nem szerzett abszolút többséget.");
                    }
                }
            }
        }

        static string JeloltNeve(int kod)
        {
            string nev;

            switch (kod)
            {
                case 1: nev = "Kovács Réka"; break;
                case 2: nev = "Nagy Bence"; break;
                case 3: nev = "Tóth Dániel"; break;
                default: nev = "Ismeretlen jelölt"; break;
            }

            return nev;
        }

        static void Kiiras(string nev, int szavazat, int ervenyes)
        {
            double szazalek = szavazat * 100.0 / ervenyes;
            Console.WriteLine($"{nev}: {szavazat} szavazat ({szazalek:F1}%)");
        }
    }
}