Loading...
+ Нов въпрос
ivan.d.uzunov avatar ivan.d.uzunov 22 Точки

05. Draw Fort (Coding 101 Exam - 6 March 2016)

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

http://pastebin.com/zP8MpvQz

до тук я докарах, на Judge дава 30%. Успях и да я развия малко повече, забелязах зависимост да се увеличават "–" на първия и предпоследния ред, но не я докарах кой знае колко по-добре.

Хелп!

 

Тагове:
0
Programming Basics
vancho avatar vancho 430 Точки

Ето ти моето решение, доста по-семпло е от твоето. Да ти кажа как да я решиш .... по-скоро виж как съм открил зависимостите и си направи логиката. Ако мога с друго да помогна...пиши....

 

            int n = int.Parse(Console.ReadLine());
            int width = 2 * n;
            int row = n / 2; // row -> ^

            // top
            Console.WriteLine(@"/{0}\{1}/{0}\", new string('^', row), new string('_', width - ((2 * row) + 4)));

            // middle
            for (int i = 0; i < n - 3; i++)
            {
                for (int j = 0; j < 2 * n; j++)
                {
                    if (j == 0 || j == 2 * n - 1)
                    {
                        Console.Write("|");
                    }
                    else
                    {
                        Console.Write(" ");
                    }
                }
                Console.WriteLine();
            }

            // bottom
            Console.WriteLine("|{0}{1}{0}|", new string(' ', row + 1), new string('_', width - ((2 * row) + 4)));
            Console.WriteLine(@"\{0}/{1}\{0}/", new string('_', row), new string(' ', width - ((2 * row) + 4)));

-1
22/08/2016 17:47:15
Luko193 avatar Luko193 342 Точки

Можеш да погледнеш как аз подходих към решаването на тази задача: http://pastebin.com/nhhNX3yL. Първо при решаването на подобни задачи е много важно първо да определиш каква е височината на фигурата, която ще принтираш и, каква е широчината на всеки един ред от нея. Също така, трябва да определиш другите компоненти от фигурата, като празно пространство и други.

В този случай - първо четеш число от конзолата, което показва височината на фигурата, дължината на всеки ред по логика съм определил, че е удвоеното прочетено число, също така имаш разстояние между колоните, празно пространство и разстояние вътре в самите колони на фигурата. Първото нещо, което трябва да направиш е да изчертаеш първия ред, след което в цикъл да изчертаеш останалата част от фигурата, без последния ред, защото той не е в зависимост. Последният ред го изчертаваш извън цикъл. По добре е да пуснеш един debug на програмата, за да ти станат по-ясни нещата и да разбереш как работи програмата.

Разбира се можеш да подходиш и по друг начин, все пак за създаването на една програма, варианти много.

0
22/08/2016 18:03:38
AntyfrizZz avatar AntyfrizZz 238 Точки

Здравей,

 

Ето ти решение и със стринг билдъри. За по голяма четимост съм слагал Append - ите на нови редове и изглежда дълго, но е прилично кратко и доста по бързо от всички други, които принтират на всяка итерация на цикъл. Хвърлих един бърз поглед върху твоето решение, но правиш доста излишни проверки. Препоръчвам ти да погледнеш това, както и на колегите и да попиеш каквото е нужно за по - елегантно решение. Не знам колко си навътре със стринг билдър и защо се използва, но с един гугъл сърч ще разбереш каквото ти трябва.

http://pastebin.com/UWrBd5VC

 

Поздрави!

0
ZornitsaSerbezova avatar ZornitsaSerbezova 455 Точки

Тези задачи предимно се решават без вложени цикли, защото така е по-лесно и отнема по-малко време за мислене.. Просто изреждаш отделните необходими цикли един след друг.

В решението на тази имам само един цикъл - за средната част на форта.

 

0
22/08/2016 19:09:01
Lubomirrrr avatar Lubomirrrr 32 Точки

Разделяй си задачата на стъпки - а за по-лесно я минавай на всяка стъпка с дебъгер.

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

0
ZornitsaSerbezova avatar ZornitsaSerbezova 455 Точки

Това, което не си забелязал, е че броят на някои от повтарящите се символи/интервали зависи от това, дали N е четно или нечетно число.

 

0
ivan.d.uzunov avatar ivan.d.uzunov 22 Точки

Ясноооооо.. Благодаря!

Значи общо взето е по-добре да се решават тези задачи с new string-ове и максимално малко цикли , като преди това в променливи си правим зависимостите, а не с вложени цикли, нали така?

И още един въпрос: задачите, които са с намаляване и увеличаване на символите на различните редове се решават със вложени цикли: Rhombus of stars (mine) . Въпроса ми е, има ли по-лесен метод, тъй като точно този тип са ми много трудни и губя много време, на изпита надали ще разполагам с толкова :Д

Ето как съм напражил още една от този тип http://pastebin.com/1b4z0iwU 

 

Благодаря :)

 

0
ivan.d.uzunov avatar ivan.d.uzunov 22 Точки

и още една - House: http://pastebin.com/Zx4Q6G1L

0
ZornitsaSerbezova avatar ZornitsaSerbezova 455 Точки

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

Задчата, която си показал, също може да се реши само с два цикъла. Без вложени цикли. Общо взето, методът на решаване на всчики задачи за рисуване на фигури е един и същ. В случая с ромба - въртиш един цикъл до средата, после още един до долу. По редове можеш да рисуваш със стрингове. Цикли е необходимо да ползваш ако имаш редуване на различни символи на един ред, например тярбава на напишеш нещо такова:*_/*_/*_/

Ето това, например:

  1. for (int col = 0; col < leftdashes; col++)

  2.                     {

  3.                         Console.Write("-");

  4.                     }

e много по-удобно да се напише така:

Console.Write(new string("-", leftdashes+1));

0
23/08/2016 07:07:47
LakerLeen avatar LakerLeen 1 Точки

http://pastebin.com/i0XuWNg3

http://pastebin.com/MXhaYU6n


 

0
zlatko81 avatar zlatko81 14 Точки

Ето моето решение :

http://pastebin.com/2mWMU0A7

След няколко часа блъскане стигнах до 50/100 точки в джъджа , забелязах зависимостта с четни и нечетни n едва тогава.

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

Трудност ми беше също последният ред в средата на замъка, който трябваше да е с долна черта. В началото си мислех че чертата е горна в долната част на крепостта(последният ред) . Да ама не , такава черта нямало и в ASCII таблицата дори .

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