Какъв е pattern-a в Malko kote


0

Здравейте колеги,

Дали някой би имал желание да сподели, каква беше логиката зад pattern-а в тази задача? Към 2 часа я мислих, измислих някаква, в която се използваше Math.Ceiling и която горе долу се получаваше до опашката(може би и след това, времето свърши). Сигурен съм че е имало и далеч по-лесен начин, който ми е убегнал. Това, което най-много ме бъгна е как се променя позицията на началото на опашката - в примера с 10 беше на средата, в последствие се изместваше след средата. Ще се радвам да споделите идеи по решението.

Мерси.




Отговори



0
За входните числа 12, 16, 20 .... се обърнах към трейнърите в залата, които отговаряха на въпроси от такъв тип. След което формулата придоби окончателен вид  ((s - 10) / 4) + 1. А кода:

// Copy Code Snippusing System; class MalkoKote { static void Main() { int s = int.Parse(Console.ReadLine()); char c = char.Parse(Console.ReadLine()); int difference = ((s - 10) / 4) + 1; Console.WriteLine(" {0}{1}{0}", new string(c, 1), new string(' ', difference)); for (int i = 0; i < difference; i++) { Console.WriteLine(" {0}", new string(c, difference + 2)); } for (int i = 0; i < difference; i++) { Console.WriteLine(" {0}", new string(c, difference)); } for (int i = 0; i < difference; i++) { Console.WriteLine(" {0}", new string(c, difference + 2)); } Console.WriteLine(" {0}{1}{2}", new string(c, difference + 2), new string(' ', 3), new string(c, difference + 1)); for (int i = 0; i < difference + 2; i++) { Console.WriteLine("{0}{1}{2}", new string(c, difference + 4), new string(' ', 2), new string(c, 1)); } Console.WriteLine("{0}{1}{2}", new string(c, difference + 4), new string(' ', 1), new string(c, 2)); Console.WriteLine(" {0}", new string(c, difference + 5)); } } et Here



от ivail0 (60 точки)


0

Аз я реших използвайки променлива = (n / 4) - 1 и new string метода. Беше лесничка, спрямо Еx-Rugs примерно, давана минала година. Малката хватка с символа я реших с четене на string и после char k = стринга[0]. Не знам дали това е най-елегантното, но работи.

edit: Не обясних добре, сега гледам, че колеги са ползвали други формули. Та: int G = (n / 4) - 1 -> G има приложение за всяка част от малко коте, разтоянието между ушите = G; хоризонталната част на опашката = G + 1; врата на коте - G широчина и дължина, и т.н. 

Искам да кажа евала, на който я е измислил задачата :D Много се смях и на приятели я показах, и те много се смяха :D Отговорите им бяха от сорта на "хахахахахаха", "Прати я на Божинов" :D


от Kantonov (60 точки)


1

Здравей,

Символът директно при четенето от конзолата го парснах към char.




1

Здравей Колега,

Реших котето като го разделям на 8 части (2 от тях са еднакви). Извеждам си и променливи за по-лесно. Използвам new string за печатането, като номерът е да нацелиш броя на въртене на циклите. В началото ми минаха нулевите тестове със size/6, но само те. "Любимият" вариант. :)

След като известно време търсих друга зависимост, се получи със (size/4 - 1), та това е било според мен специфичното.

Ето го крайният ми вариант на Малкото Коте. :)


от pepsi_555 (1932 точки)


1

Просто решение само с 2 променливи. 100/100. Означил съм частите на котака с коментари.

using System;

namespace Test2
{
    class Program
    {
        static void Main()
        {
            int n = int.Parse(Console.ReadLine());
            char ch = char.Parse(Console.ReadLine());
            int head = n / 2 - (n / 2 - 1) / 2;
            int headHeight = n / 2 - (n / 2 + 1) / 2;
            // Ears
            Console.WriteLine(new string(' ', 1) + new string(ch, 1) + new string(' ', head - 2) + new string(ch, 1));
            //Head
            for (int i = 0; i < headHeight - 1; i++)
            {
                Console.Write(new string(' ', 1) + new string(ch, head));

                Console.WriteLine();
            }
            //Neck
            for (int i = headHeight - 1; i < 2 * headHeight - 2; i++)
            {
                Console.Write(new string(' ', 1) + new string(' ', 1) + new string(ch, head - 2) + new string(' ', 1));

                Console.WriteLine();
            }
            //Upper body
            for (int i = 0; i < headHeight - 1; i++)
            {
                Console.WriteLine(new string(' ', 1) + new string(ch, head));
            }
            //Body and tip of tail
            Console.WriteLine(new string(' ', 1) + new string(ch, head) + new string(' ', 3) + new string(ch, head - 1));
            //Body and tail
            for (int i = 0; i < head; i++)
            {
                Console.WriteLine(new string(ch, head + 2) + new string(' ', 2) + new string(ch, 1));
            }
            //Bottom
            Console.WriteLine(new string(ch, head + 2) + new string(' ', 1) + new string(ch, 2));
            Console.WriteLine(new string(' ', 1) + new string(ch, head + 3));
        }
    }
    
}


от lllevski (1431 точки)


0

Здравейте, понеже май не видях да се коментират 2 варианта на изчертаване ще споделя какво забелязах. Да погледнем случая при n=10 и n=14. При 10 шията (точно под главата  :D ) има размер 1×1, съответно при 14 - 2×2. С други думи при n=12 има 2 възможности. Едната е първо да нарастне с 1 ред и след това с 1 колона и другата - точно обратното :)  На мен лично ми допада идеята да нараства първо с ред :) Аз лично я реших с броене на четни и нечетни числа. Четните отговарят за броя редове за всяка част от котето, а нечетните отговарят за колоните. Числата ги броя от 1 до (n-10)/2 + 1; 




0

ето я и моята променлива int sizeKote = (s - 10) / 4 + 1; която използвам за всеки ред -> -10 защото 10 е нач.точка, /4 защото през 4 се променя бр. на символите, и +1 за по-бързо смятане. Съответно първите редове от Малко Коте са:

 Console.Write(" {0}", ch);
            Console.Write(new string(' ', sizeKote));
            Console.WriteLine("{0} ", ch);

            for (int i = 0; i < sizeKote; i++)
            {
                Console.Write(" ");
                Console.WriteLine(new string(ch, sizeKote + 2));
            }

            for (int i = 0; i < sizeKote; i++)
            {
                Console.Write("  ");
                Console.WriteLine(new string(ch, sizeKote));
            }

...  към целия код ->  https://github.com/GitHubNameNew/MalkoKote