Задача за рисуване "Summer Time" - проблем
Здравейте,
Понеже се упражнявам за изпита в "Judge" имам проблем с няколко задачи но тази ме озадачи. Чертае коректно за всички стойности (тестове) но "Judge-a" ми връща 0т. :). и когато гледам нулевите тестове нещо не схващам. Поствам тук моето решение ако някой има идея моля да споделите. Мерси предварително!
http://pastebin.com/AkiEbGxq
Това с бутилката единствено ме затрудни разклоняването с 1-ния ред надоло, само за там как се изчислява формулата, може ли някой да я напише ?
Всичко пробвах с тези нечетни числа и неможах да направя ръбовете с разклонението.
Другото ми излиза шишето цялото, обаче реда където се разклонява нещо ми се чупи кода.
Благодаря.
for (int i = 0, j = ((width - n) / 2) - 1, k = (n - 1) + 2; i < n / 2 - 1; i++, j--, k = k + 2)
{
Console.Write(new string(' ', j) + "*" + new string(' ', k) + "*");
Console.WriteLine();
}
Ей така направих аз разклонението (където бутилката става по-дебела, нали това имаш предвид).
Виж дали ще ти стане ясно или да обяснявам. Макар че, честно казано тези задачи ги правя (ако успея да ги направя) веднъж и после като си погледна кода ми трябва сума ти и време докато го проумея.
Мале от този код много ми е объркан превода , може ли да ми дадеш твоите променливи коя за кое ползваш и кой цикъл какво ти прави.
Защотот като ги погледна ще ги сравня с моите променливи , да е малко по - лесно и разбираемо за мен . Мерси
Знаех си, че така ще кажеш. Объркана работа, наистина. Обикновено не пиша такъв код. Само при този тип задачи ("трета задача") така правя. Следя изхода да е като хората (че пиша калпав код не ми пука, целта е бързо да го напиша), търся зависимости и раздробявам кода на отделни подзадачи (обикновено ей такива цикли, които да принтират изхода на части).
В случая:
n - задава се от потребителя;
width = 2*n (ширина на бутилката при дъното);
i - инциализираща променлива за цикъла с граница i < n / 2 - 1 и стъпка i++; т.е при n = 3, n/2-1 = 0, и в този случай не се отпечатва нищо; при n = 5, n/2-1 = 1; при n = 7, n/2-1 = 2, т.е. нужния изход.
Друго какво имаме - принтиране на празни места, после звездичка (*), после пак празни места, после пак звездичка; празните места преди звездичката ми ги принтира този стринг:
new string(' ', j), където j стартира от j = (n / 2) - 1 и на всяка стъпка имаме j = j - 1, т.е. празните места намяляват с единица. После си отпечатваме самотната звездичка.
Следват празни места принтиращи се от стринга new string(' ', k) , където k = (n - 1) + 2 и k = k + 2. Зависимостта (n-1) я измислих от "капачката на бутилката". Там принтирам звездичка, после още (n-1) звездички и после пак звездичка. А пък тук имаме още два символа, по един от двете страни, а с всеки следващ ред празните места се увеличават с 2, оттам k = k + 2.
Ами това е. Дано да съм ти бил полезен. Друг съвет, който мога да ти дам е, ако зациклиш или мислиш, че ще зациклиш с тази задача, да минеш на следващата. Аз на отделните задачи съм си определил по колко време да отделям. На тази, ако всичко върви, за максимум 30-40 минути я правя и съм решил, ако не намеря зависимости в рамките на 15 минути да я прескоча и да я оставя за накрая.
Аз да ти кажа, сега започнах да гледам как се решават фигурките, но за всяка има някаква зависимост и фор цикли.
Обаче странното е че , като реша една , после като искам да я реша пак и се бъркам нещо , незнам защо така сигурно нямам много тренировка.
Ама тъкмо разбера зависимостт-а и трябва пак да гледам какво направих и да преглеждам по 10 пъти , отнема ми 1 час че и повече на една задача.
Ако го намаля на 30 като тебе е аз ще стана един от добрите курсисти , което ще ми вдъхне доверие ,че вече започвам да влизам в час.
Твоята пак започнах да я решавам , и сега тази вечер преди да си легна мисля да я направя, че тогава да лягам. А дано вече малко от малко схвана къде бъркам.
Не се впрягай, ако не можеш да решиш всички задачи от този тип (трета задача). И аз не съм успявал да реша всички, които съм пробвал. Като не успея, гледам авторското решение. Тези задачи са малко като ония логическите - да намериш всички разлики в двете картинки. Ами не става всеки път. Зависи колко ти работи в момента способността за концентрация и т.н. (може да си преуморен и т.н.). Затова като не върви - прескачаш задачата и толкова.