20 svar
195 visningar
Farbrorgul 408
Postad: 7 maj 2021 10:29

Tebryggning


 Har fastnat ett tag på denna uppgift nu, skulle vilja ha hjälp med nästa steg. Jag behöver alltså beräkna hur många kannor varje påse räcker till för att vara optimalt. Hur gör man det? Min kod hittills:

class Program
    {
        static void Main(string[] args)
        {
            // Läser in antalet tepåsar
            int antalTe = 0;
            while (!(antalTe <= 10 && antalTe >= 1))
            {
                Console.WriteLine("Antal tepåsar:");
                antalTe = ReadInt();
            }

            // Läser in antalet deltagare
            int antalDeltagare = 0;
            while (!(antalDeltagare <= 100 && antalDeltagare >= 1))
            {
                Console.WriteLine("Antal deltagare: ");
                antalDeltagare = ReadInt();
            }

            // Skapar fält med de olika tepåsarna
            int[] påseLista = new int[antalTe];

            // Läser in hur många personer varje påse räcker till
                for (int i = 0; i < påseLista.Length; i++)
                {
                    Console.WriteLine($"Påse {i+1} räcker till:");
                    påseLista[i] = ReadInt();

                    while (!(påseLista[i] >= 1 && påseLista[i] <= 100))
                    {
                        Console.WriteLine("Du måste skriva ett tal mellan 1 och 100");
                        Console.WriteLine($"Påse {i + 1} räcker till:");
                        påseLista[i] = ReadInt();
                    }
                }

            int maxPerKanna = 10;
            int antalKannor = 0;

            for (int i = 0; i < påseLista.Length; i++)
            {
                if (påseLista[i] == maxPerKanna)
                {
                    antalKannor++;
                }
                else if (påseLista[i] >= 10 || påseLista[i] <= 10)
                {
                    
                }
            }

            Console.WriteLine(antalKannor);


            Console.ReadKey();

        }

        static int ReadInt()
        {
            int heltal;
            while (int.TryParse(Console.ReadLine(), out heltal) == false)
            {
                Console.WriteLine("Du skrev inte ett heltal. Skriv igen.");
            }
            return heltal;
        }

    }
}


 

Laguna Online 30711
Postad: 7 maj 2021 10:49

Ger programmet fel svar eller fungerar inte alls?

Farbrorgul 408
Postad: 7 maj 2021 10:57
Laguna skrev:

Ger programmet fel svar eller fungerar inte alls?

Jag har bara gjort hälften (läst in input från användaren). Förstår inte riktigt hur jag ska göra resten.

Laguna Online 30711
Postad: 7 maj 2021 11:49

Vad svarar du på exempel 4?

Farbrorgul 408
Postad: 7 maj 2021 13:24
Laguna skrev:

Vad svarar du på exempel 4?

Vad menar du med exempel 4?

Laguna Online 30711
Postad: 7 maj 2021 13:28

Förlåt, jag menar exempel 2.

Farbrorgul 408
Postad: 7 maj 2021 16:08 Redigerad: 7 maj 2021 16:08
Laguna skrev:

Förlåt, jag menar exempel 2.

Svar: 11

Förklaring: Det optimala är att brygga sex kannor med första tepåsen, tre kannor med tredje tepåsen och två med den fjärde tepåsen. Det ger54+30+16koppar te, vilket räcker till de 100 deltagarna.3 
 
 

Laguna Online 30711
Postad: 7 maj 2021 16:17

Då har vi samma svar. Kan vi formulera algoritmen i ord?

Farbrorgul 408
Postad: 7 maj 2021 17:24
Laguna skrev:

Då har vi samma svar. Kan vi formulera algoritmen i ord?

Det är här jag har det lite svårt. Jag tänker att det ska vara så få kannor som möjligt, och en kanna räcker till 10 pers. Om t.ex. påse 1 räcker till 15 blir det en kanna, om påse 2 räcker till 9 blir det en kanna, om påse 3 räcker till 27 pers blir det 3 kannor. Har dock ingen aning om hur jag ska förklara algoritmen i psuedokod.

Laguna Online 30711
Postad: 7 maj 2021 17:30

Några fakta som kanske hjälper:

Det spelar ingen roll om vi använder onödigt många tepåsar.

Om vi behöver 10 koppar (jag menar te till 10 personer) så kan vi ta vilken tepåse som helst som fortfarande kan ge 10 koppar.

Farbrorgul 408
Postad: 7 maj 2021 17:34
Laguna skrev:

Några fakta som kanske hjälper:

Det spelar ingen roll om vi använder onödigt många tepåsar.

Om vi behöver 10 koppar (jag menar te till 10 personer) så kan vi ta vilken tepåse som helst som fortfarande kan ge 10 koppar.

Ja precis. Har du någon lösning? Jag lär mig mest av att se lösningar och sedan memorera/tänka hur jag ska göra på liknande uppgifter.

Laguna Online 30711
Postad: 7 maj 2021 17:50

Då tar jag först hand om alla hela kannor, dvs. multipler av tio. T. ex. i exempel 2 blir det 50+30+10. Det räcket inte till 100, men vad har vi kvar när vi har bryggt dessa kannor? 

Farbrorgul 408
Postad: 7 maj 2021 17:53
Laguna skrev:

Då tar jag först hand om alla hela kannor, dvs. multipler av tio. T. ex. i exempel 2 blir det 50+30+10. Det räcket inte till 100, men vad har vi kvar när vi har bryggt dessa kannor? 

15 kvar blir det då. Ska man användas modulus för att beräkna rest?

Laguna Online 30711
Postad: 7 maj 2021 17:55

Vi har 10 koppar kvar att brygga, och vad kan vi få ut av våra tepåsar nu? 

Farbrorgul 408
Postad: 7 maj 2021 18:29 Redigerad: 7 maj 2021 18:30
Laguna skrev:

Vi har 10 koppar kvar att brygga, och vad kan vi få ut av våra tepåsar nu? 

Förstår inte vad du menar.

Laguna Online 30711
Postad: 7 maj 2021 18:36

Du skrev 15. Var kom det ifrån? 

Farbrorgul 408
Postad: 7 maj 2021 18:37
Laguna skrev:

Du skrev 15. Var kom det ifrån? 

4 kvar från påse 1, 2 kvar från påse 2, 3 kvar från påse 3, 6 kvar från påse 4.

4+2+3+6 = 14

Skulle skrivit 14.

Laguna Online 30711
Postad: 7 maj 2021 18:41

Då menar jag just det: vi har påsar som kan ge 4, 2, 3 och 6 koppar. Vad är bästa sättet att göra de 10 koppar som fattas? 

Farbrorgul 408
Postad: 7 maj 2021 18:42
Laguna skrev:

Då menar jag just det: vi har påsar som kan ge 4, 2, 3 och 6 koppar. Vad är bästa sättet att göra de 10 koppar som fattas? 

Det är ju två olika påsar, alltså behöver man ha 2 kannor med 4 och 6 koppar separerade.

Laguna Online 30711
Postad: 7 maj 2021 18:43

Vi tar alltså de påsar som ger mest. Då har vi sett hela proceduren. Kan du formulera en algoritm nu? 

Farbrorgul 408
Postad: 7 maj 2021 18:55
Laguna skrev:

Vi tar alltså de påsar som ger mest. Då har vi sett hela proceduren. Kan du formulera en algoritm nu? 

Jag tror jag är nära. Får rätt svar på exempel 1 men får 10 istället för 11 på exempel 2. Vad har jag gjort för fel?

int maxPerKanna = 10;
            int antalKannor = 0;
            int restRäknare = 0;

            for (int i = 0; i < påseLista.Length; i++)
            {
                if (påseLista[i] >= maxPerKanna)
                {
                    antalKannor += påseLista[i] / 10;
                }
                
                else if (antalKannor*10 <antalDeltagare)
                {
                    restRäknare += påseLista[i] % 10;
                }
            }

            if (restRäknare < 10) antalKannor++;
            else
            {
                antalKannor += restRäknare / 10;
            }

            Console.WriteLine(antalKannor);
Svara
Close