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;
}
}
}
Ger programmet fel svar eller fungerar inte alls?
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.
Vad svarar du på exempel 4?
Laguna skrev:Vad svarar du på exempel 4?
Vad menar du med exempel 4?
Förlåt, jag menar exempel 2.
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
Då har vi samma svar. Kan vi formulera algoritmen i ord?
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.
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.
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.
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?
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?
Vi har 10 koppar kvar att brygga, och vad kan vi få ut av våra tepåsar nu?
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.
Du skrev 15. Var kom det ifrån?
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.
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?
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.
Vi tar alltså de påsar som ger mest. Då har vi sett hela proceduren. Kan du formulera en algoritm nu?
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);