Проблем при 1 зад от допълнителните задачи за списъци и речници-Immune system C#-tech modula
Условието на задачата може да се види от линка по долу.
Въпросът ми е защо в моето проектно-решение не се изпълнява foriech-a при първата итерация на while цикъла.(т.е. не се изпълнява нито едно от двете условия в него.Странното е ,че при другите итерации условията във него се изпълняват.При първата итерация списъка е празен,но дори и да му дам някакви неща,не се изпълняват условията в цикъла.
https://softuni.bg/trainings/resources/officedocument/31796/more-exercise-problem-descriptions-optional-programming-fundamentals-may-2018/1939.
Ето моето решение:
namespace Imunne_Sysrem
{
class Program
{
static void Main(string[] args)
{
int inicialhealth = int.Parse(Console.ReadLine());
int remeininghealt = inicialhealth;
List < string >nameofvirus= new List<string>();
while(true)
{
string virusname = Console.ReadLine();
if (virusname=="end")
{
Console.WriteLine($"Final Health: {remeininghealt}");
break;
}
int virusstrench;
int sum = 0;
int timetodefeat = 0; ;
for (int i = 0; i <virusname.Length; i++)
{
sum +=virusname[i];
}
virusstrench =sum / 3;
foreach (string name in nameofvirus)
{
if (name == virusname)
{
timetodefeat = (int)virusstrench * virusname.Length / 3;
break;
}
else
{
timetodefeat = virusstrench * virusname.Length;
}
}
int timeminute = timetodefeat / 60;
int timeseconds = timetodefeat % 60;
remeininghealt = remeininghealt- timetodefeat;
if(inicialhealth>=virusstrench)
{
Console.WriteLine($"Virus {virusname}: {virusstrench} => {timetodefeat} seconds");
Console.WriteLine($"{virusname} defeated in {timeminute}m {timeseconds}s." );
Console.WriteLine($"Remaining health: {remeininghealt}");
}
else
{
Console.WriteLine("Immune System Defeated.");
return;
}
remeininghealt=(int)Math.Round(remeininghealt*1.2);
if (remeininghealt > inicialhealth)
{
remeininghealt= inicialhealth;
}
nameofvirus.Add(virusname);
}
}
}
}
Здравей Теодоре,
Маркирах ти отговора като най-добър понеже едва ли някой ще даде по изчерпателен от твоя,но в тази задача има и нещо друго,което не е обяснено добре в условието, а то е че ако даден вирус ни порази втори път времето за поражение,което при мен е timetodefeat се дели на 3.За това добавям virusname в края на цикъла.Идеята е при първата атака на деден вирус(н.р.ebola) да го няма в списъка.Така ще начисля време за поражение,което се смята по определен начин.При втора атака на същият вирус се начислява времето/3.
Лек и успешен ден.
Е това ще го направиш много лесно една bool проверка прочиташ името на вируса проверяваш го дали вече го имаш и ако го имаш бам делиш 1/3 и презаписваш само новите неща в речника. Защото ако си опиташ пак да го добавиш ще изгърмиш че ключа съществува.това че записваш вирса още в началото няма никакво значение. Как ще направиш после нещата. Ти така или иначе в речник може един път да вкараш един ключ.
Условието е ок. Ти просто подхождаш по кофти начин към него.