Loading...
ivandm5 avatar ivandm5 17 Точки

Задача 05. Rocket - Изпит 20 November 2016 - Evening

Здравейте, някой ще ми даде ли идея от къде да взема формулката на тази задача стигнах до тук след 2 часово мислене, но нещо не ми се получава:
 

using System;


namespace rocket
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            var width = (3 * n);
 

 
            for (int rows = n; rows > 0; rows--)
            {


 
                Console.WriteLine(@"{0}/{1}\{0}", new string('.', (n / 2) + rows - 1), new string(' ' ,width * rows + 2));

  
               
             }
            Console.WriteLine("{0}{1}{0}", new string('.', n / 2), new string('*', n * 2));
            for (int rows = 0; rows < n * 2; rows++)
            {
              
            }
        }
    }
}

Този тип задачи са ми най-трудни пробвам да решавам такива от всички изпити назад, но първо трябва да видя идеята след това може да успея да реша задачката. Така без да знам за идеята не ми се получава. 
Задачите от първа до трета ги научих. От някой изпити решавам и четвърта, но тази със фигурката още не мога да я науча.
Някой ще даде ли идеи какво да правя. 

0
Programming Basics
ivandm5 avatar ivandm5 17 Точки
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace fox
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            var width = 2 * n + 3;
            
            /* Draw First Part */
            for (int rows = 0; rows < n; rows++)
            {
                Console.WriteLine(@"{0}\{1}/{0}",new string('*',rows + 1), new string('-',width - 2 - 2 - 2 * rows));   
            }
            






            /* Draw Second Part REPLACE FORMULA*/

            for (int i = 0; i < n / 3; i++)
			{

                Console.WriteLine(@"|{0}\{1}/{0}|", new string('*', n / 2 + i), new string('*', ****FORMULA*****));
			}



            /* Draw 3rd Part */
            for (int rows = 0; rows < n; rows++)
            {
                Console.WriteLine(@"{0}\{1}/{0}", new string('-', rows + 1), new string('*', width - 2 - 2 - 2 * rows));
            }
             

            
        }
    }
}

Пробвах се да реша и 05. Fox Задача от Morning и ето до къде стигнах така и не мога да измисля формулата където съм написал ****Formula****

0
VenciSarov avatar VenciSarov 37 Точки

Ето я и лисицата :)

using System;

class Fox
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());

        int leftRightStars = 1;
        int middleDashes = ((2 * n) + 3) - ((leftRightStars * 2) + 2);
        int rightLeftStars = n / 2;
        int middleStars = n;

        for (int i = 0; i < n; i++)
        {
            Console.WriteLine("{0}\\{1}/{0}",
                new string('*', leftRightStars),
                new string('-', middleDashes));
            leftRightStars++;
            middleDashes -= 2;
        }
        for (int i = 0; i < n / 3; i++)
        {
            Console.WriteLine("|{0}\\{1}/{0}|",
                new string('*', rightLeftStars),
                new string('*', middleStars));
            rightLeftStars++;
            middleStars -= 2;
        }

        leftRightStars = 1;
        middleDashes = ((2 * n) + 3) - ((leftRightStars * 2) + 2);
        for (int i = 0; i < n; i++)
        {
            Console.WriteLine("{0}\\{1}/{0}",
                new string('-', leftRightStars),
                new string('*', middleDashes));
            leftRightStars++;
            middleDashes -= 2;
        }
    }

0
ivandm5 avatar ivandm5 17 Точки

Мерси за идеята и за споделянето на твоите решения. Какво ще кажеш за моя начин за решаване на първата и третата част на лисицата?  
 

0
29/11/2016 09:59:23
VenciSarov avatar VenciSarov 37 Точки

Малко сложно я решаваш, поне според мен, но все пак ето формулата, която ти трябва: 

width - 4 - (n / 2 + i)*2)

0
29/11/2016 10:17:54
VenciSarov avatar VenciSarov 37 Точки

Здравей,

тази задача ми беше на изпита. Давам ти моето решение от тогава. Много е възможно да има и по-добро, но на изпита се бърза :)

using System;

class Rocket
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());

        int leftRightPoints = ((3 * n) - 2) / 2;
        int spaces = 0;

        for (int i = 0; i < n; i++)
        {
            Console.WriteLine("{0}/{1}\\{0}",
                new string('.', leftRightPoints),
                new string(' ', spaces));
            leftRightPoints--;
            spaces += 2;
        }

        leftRightPoints++;

        Console.WriteLine("{0}{1}{0}",
            new string('.', leftRightPoints),
            new string('*', spaces));
        spaces -= 2;
        for (int i = 0; i < 2 * n; i++)
        {
            Console.WriteLine("{0}|{1}|{0}",
                new string('.', leftRightPoints),
                new string('\\', spaces));
        }

        for (int i = 0; i < n / 2; i++)
        {
            Console.WriteLine("{0}/{1}\\{0}",
               new string('.', leftRightPoints),
               new string('*', spaces));
            leftRightPoints--;
            spaces += 2;
        }
    }
}

При този тип задачи, според мен най-важното е първо да ги разделиш на отделни фигурки. В случая с "Ракетата", може да се раздели на 3 части. 1ва рърха, 2ра средна част и 3та долната част. Общо 3 фор цикъла. Тук е важно да не се забрави и реда, който трябва да се отпечата между върха и средната част на ракетата, той е различен и затова съм го изкарал отделно от фор циклите. За да разбереш колко точки ти трябват в началото от ляво и от дясно, трябва да съобразиш ширината на цялата фигурка, която по условие ти е дадена 3 * n. Тук логично формулката за левите и десните точки на 1вия ред да ти е: ((3 * n) - 2) / 2. На първия ред м/у тези "/\" символи, нямаш нищо, но на следващите редове имаш празни пространства. Затова в самото начало променливата "spaces" е 0 и след първата интерация на 1вия фор цикъл я увеличаваш с 2 и респективно намялаваш точките с по 1.

Дано да съм помогнал поне малко.

0
e.petrova avatar e.petrova 94 Точки

Здравей. При този тип задачи наистина е хубаво първо да разделиш фигурата на части, след което да се съобразиш с това каква е дължината и височината на фигурата. Задачата не се състои толкова в това как да се напише, а в това каква ще бъде логиката. Трябва да намериш зависимостта между числото и символите. Понякой път има зависимост между четни и нечетни числа, друг път няма. Не забравяй обаче че може да си спестиш една проверка, използвайки целочислено деление. Решавай повече задачи, пререши ако трябва задачите от лекциите наново, всички изпитни задачи, дори и от стари изпити, за да ти се изяснят повече. Просто трябва да намериш логиката, по която ще я решиш.

0
ivandm5 avatar ivandm5 17 Точки

Мерси за съветите мисля да пререша задачките.

0
dimitar9111 avatar dimitar9111 54 Точки

Ето моето решение по вертикал и хоризонтал е разделена на три.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _05.Rocket
{
    class Program
    {
        static void Main(string[] args)
        {
            var n = int.Parse(Console.ReadLine());
            var width = 3 * n;
            var leftRight = (width - 2) / 2;
            var middle = 0;
            for (int i = 0; i < n; i++)
            {
                Console.WriteLine("{0}/{1}\\{0}",
                    new string('.',leftRight),
                    new string(' ',middle));
                leftRight--;
                middle += 2;
            }
            leftRight++;
            middle -= 2;

            Console.WriteLine("{0}{1}{0}",
                new string('.',leftRight),
                new string('*',middle+2));

            for (int i = 0; i < 2*n; i++)
            {
                Console.WriteLine("{0}|{1}|{0}",
                    new string('.',leftRight),
                    new string('\\',middle));
            }

            for (int i = 0; i < n/2; i++)
            {
                Console.WriteLine("{0}/{1}\\{0}",
                    new string('.',leftRight),
                    new string('*',middle));
                leftRight--;
                middle += 2;
            }

        }
    }
}
 

0
StefanTep avatar StefanTep 4 Точки

Това е моето от изпита 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


class Program
{
    static void Main(string[] args)
    {
        int n = int.Parse(Console.ReadLine());
        for (int i = 0; i < n; i++)
        {
            Console.WriteLine("{0}/{1}\\{0}", new string('.', (3 * n) / 2 - i-1),new string(' ',i*2));
        }
        Console.WriteLine("{0}{1}{0}",new string('.',n/2),new string('*', n*2));
        for (int i = 1; i <= n*2; i++)
        {
            Console.WriteLine("{0}|{1}|{0}",new string('.', n / 2),new string('\\',3*n-n-2));
        }
        for (int i = 0; i < n/2; i++)
        {
            Console.WriteLine("{0}/{1}\\{0}",new string('.',n/2-i),new string('*',3*n- n-2 + i*2));
        }
    }
}
 

0
borislavcho avatar borislavcho 11 Точки

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

FACEBOOK: https://www.facebook.com/profile.php?id=100007936724968&fref=ts

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Rochet
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());
            int outerDashesCount = n / 2;
            int winth = 3 * n;
            int upperLeftDashesCount = (3 * n - 2) / 2;
            int inerSpasesCount = 0;
            int inerStarsCount = winth - 2 - 2 * (n / 2);
            for (int i = 0; i < n; i++)
            {
                Console.WriteLine(@"{0}/{1}\{0}", new string('.', upperLeftDashesCount), new string(' ', inerSpasesCount));
                upperLeftDashesCount--;
                inerSpasesCount += 2;
            }
            Console.WriteLine("{0}{1}{0}", new string('.', outerDashesCount), new string('*', 2 * n));
            for (int i = 0; i < 2 * n; i++)
            {
                Console.WriteLine(@"{0}|{1}|{0}", new string('.', n / 2), new string('\\', winth - 2 - 2 * (n / 2)));
            }
            for (int i = 0; i < n / 2 ; i++)
            {
                Console.WriteLine(@"{0}/{1}\{0}", new string('.', outerDashesCount), new string('*', inerStarsCount));
                outerDashesCount--;
                inerStarsCount += 2;
            }
        }
    }
}

 

0
iliyants avatar iliyants 6 Точки

Ето и моето решение. Надявам се да е полезно.:)

using System;

namespace roket
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());

            var cols = 3 * n;
            var dots = cols / 2 - 1;
            var stars = n * 2 - 3;
           

            Console.WriteLine("{0}/\\{0}",new string('.',dots));

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

            for (int i = 0; i < n*2; i++)
            {
                Console.WriteLine("{0}|{1}|{0}", new string('.', n / 2), new string('\\', (n * 2)-2));
            }
            for (int i = 1; i <= n/2; i++)
            {
                Console.WriteLine("{0}/{1}\\{0}", new string('.', dots--), new string('*', (stars++)+i));
            }
        }
    }
}

 

0
Miroslav_Kisov avatar Miroslav_Kisov 60 Точки

Ракета https://pastebin.com/xuW1rycd

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