Telerik Academy Exam - C# Fundamentals @ 9 November 2016 Evening Задача 2 Goint To A Party


0

Добър ден!

Това, което не мога да разбера в задачата е как да направя така, че да не влизам в тия цикли, показани в Constraints и съответно как да получа спрямо това отговорите на нулевите тестове?

Поздрави!




Отговори



0

Няма нужда да правиш нищо...

Секцията Constraints обикновено показва гранични случаи, а тук просто казва че входът никога няма да е такъв че да попаднеш в безкраен цикъл т.е. да минеш позиция напред и после позиция назад и така до безкрай( aA^ ).

Ако не ти минават нулевите тестове помисли къде бъркаш с алгоритъма ти... или дай да видим какви си ги сътворил.


от markovood (369 точки)


0

https://pastebin.com/txx9T8q8

Ето до тук го докарах.


от Edwardcho (30 точки)

0

Там където проверяваш directions[i] трябва да е всъщност directions[position] тъй като текущата позиция не е последователна а е според индекса на текущия символ, като a = 1, b = 2 и т.н. виж условието...

Не понятна ми е логиката с която определяш дали да се движи напред (+) или назад (-), защо е това (int)(directions[position] - 96...

По удобно би било ако имаш отделни масиви със английската азбука, един за малки и един за големи букви и да проверяваш дали текущия символ е в единия или в другия масив и съответно да местиш напред или назад със толкова колкото е индекса на намерения текущ символ...

ето и едно примерно решение ако ще се ориентираш по-лесно...

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace GoingToAParty { class Program { static void Main(string[] args) { char[] forwardDirections = new char[26] { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' }; char[] backwardDirections = new char[26] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' }; string directions = Console.ReadLine(); int currentPosition = 0; for (int i = 0; i < directions.Length; i++) { if (currentPosition > directions.Length || currentPosition < 0) { Console.WriteLine("Djor and Djano are lost at {0}!", currentPosition); break; } char currentChar = directions[currentPosition]; if (currentChar == '^') { Console.WriteLine("Djor and Djano are at the party at {0}!", currentPosition); break; } if (char.IsLower(currentChar)) { currentPosition += Array.IndexOf(forwardDirections, currentChar) + 1; } if (char.IsUpper(currentChar)) { currentPosition -= Array.IndexOf(backwardDirections, currentChar) + 1; } } } } }


от markovood (369 точки)