Loading...
ivodonev avatar ivodonev 7 Точки

Задача за рисуване "Summer Time" - проблем

Здравейте,

Понеже се упражнявам за изпита в "Judge" имам проблем с няколко задачи но тази ме озадачи. Чертае коректно за всички стойности (тестове) но "Judge-a" ми връща 0т. :). и когато гледам нулевите тестове нещо не схващам. Поствам тук моето решение ако някой има идея моля да споделите. Мерси предварително!

http://pastebin.com/AkiEbGxq

 

 

Тагове:
0
Programming Basics 29/10/2015 15:07:20
iMitaka avatar iMitaka 48 Точки

Здравей! 

Първо искам да каже, че тестовете в системата са точни и не е там проблема, аз лично съм я решавал тази задача с резултат 100/100.

Прегледах кода ти и видях, че имаш една грешка и тя е първия цикъл:

  for (int i = 0; i < size / 2 + 1; i++)
        {
            Console.WriteLine("{0}*{1}*{0}", new string(' ', (width - bottleNeck) / 2), new string(' ', bottleNeck - 2));
        }

Грешката е във "size / 2 + 1" като четаеш 1 ред повече в гърлото на бутилката, трябва да се махне това ''+1'' и да остане само ''size / 2'' така всичко е наред и би трябвало да ти даде 100-те точки.

Един съвет за тия задачи: За кодене са много лесни, но трябва добре да се обмислят и много добре да се прегледат готовите резултати който ти дават в примерите, да бройш внимателно редове и колони на картинката, да не стават такива пропуски, че понякога както е в твоя пример ''+1'' 2 символа код.. но не ти дават макс брой точки който особено при първите 3 задачи е силно препоръчително да ги имаш 300/300. smiley

Успех! wink

0
dZf1aeA-KlimentHristov avatar dZf1aeA-KlimentHristov 56 Точки

Това с бутилката единствено ме затрудни разклоняването с 1-ния ред надоло, само за там как се изчислява формулата, може ли някой да я напише ?

Всичко пробвах с тези нечетни числа и неможах да направя ръбовете с разклонението.

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

Благодаря.

0
Ivaylo.Goranov avatar Ivaylo.Goranov 68 Точки

 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();
        }

Ей така направих аз разклонението (където бутилката става по-дебела, нали това имаш предвидsmiley).
Виж дали ще ти стане ясно или да обяснявам. Макар че, честно казано тези задачи ги правя (ако успея да ги направя) веднъж и после като си погледна кода ми трябва сума ти и време докато го проумея.smiley

0
30/10/2015 17:30:06
dZf1aeA-KlimentHristov avatar dZf1aeA-KlimentHristov 56 Точки

Мале от този код много ми е объркан превода , може ли да ми дадеш твоите променливи коя за кое ползваш и кой цикъл какво ти прави.

Защотот като ги погледна ще ги сравня с моите променливи , да е малко по - лесно и разбираемо за мен . Мерси

0
Ivaylo.Goranov avatar Ivaylo.Goranov 68 Точки

Знаех си, че така ще кажеш.smiley Объркана работа, наистина. Обикновено не пиша такъв код. Само при този тип задачи ("трета задача") така правя. Следя изхода да е като хората (че пиша калпав код не ми пука, целта е бързо да го напиша), търся зависимости и раздробявам кода на отделни подзадачи (обикновено ей такива цикли, които да принтират изхода на части).
В случая:
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 минути да я прескоча и да я  оставя за накрая.

0
dZf1aeA-KlimentHristov avatar dZf1aeA-KlimentHristov 56 Точки

Аз да ти кажа, сега започнах да гледам как се решават фигурките, но за всяка има някаква зависимост и фор цикли.

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

Ама тъкмо разбера зависимостт-а и трябва пак да гледам какво направих и да преглеждам по 10 пъти , отнема ми 1 час че и повече на една задача.

Ако го намаля на 30 като тебе е аз ще стана един от добрите курсисти , което ще ми вдъхне доверие ,че вече започвам да влизам в час.

Твоята пак започнах да я решавам , и сега тази вечер преди да си легна мисля да я направя, че тогава да лягам. А дано вече малко от малко схвана къде бъркам. 

0
30/10/2015 23:21:43
Ivaylo.Goranov avatar Ivaylo.Goranov 68 Точки

Не се впрягай, ако не можеш да решиш всички задачи от този тип (трета задача). И аз не съм успявал да реша всички, които съм пробвал. Като не успея, гледам авторското решение. Тези задачи са малко като ония логическите - да намериш всички разлики в двете картинки. Ами не става всеки път. Зависи колко ти работи в момента способността за концентрация и т.н. (може да си преуморен и т.н.). Затова като не върви - прескачаш задачата и толкова.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.