Професионална програма
Loading...
+ Нов въпрос
radybt avatar radybt 9 Точки

[Programming Basics] 01. X задача

Никога не ме е бивало в тея рисунки и се заинатих да я реша тая задача сам. Подозирам, че съм написал поне 2 пъти повече код отколкото е необходимо. 100/100 е, но бих се радвал да дадете съвети, мнения, решения и тн. Кои неща са ми излишни?

Задачата с рисуването на C# Baisics изпита е единствената която не можах да реша или по-скоро не ми стигна времето да мисля сложната си логика :D за това искам да го оправя това. 

Кода: https://pastebin.com/eTwaPNu5

0
Programming Basics 01/06/2017 16:44:09
RoYaL avatar RoYaL Trainer 6845 Точки
Best Answer

Няма проблем, ще дадем мнение, но за целта ще ни трябва да видим кода ти. Би ли могъл да го качиш в https://pastebin.com/?

1
radybt avatar radybt 9 Точки

Опа, пейстнах го точно и нещо съм се разсеял  - редактирах го! 

0
RoYaL avatar RoYaL Trainer 6845 Точки

Супер.

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

Имаш три "шаблона" - първият е свиването на хиксчетата едно към друго от най-раздалечени до един до друг. Вторият е хиксче в средата и третият е огледален на първия шаблон.

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

Първия ред е съставен от 0(нула) празни пространства от ляво и от дясно (тези от дясно нямат значение, не знам защо ги рисуваш); две хиксчета и останалото между двете хиксчета - празни пространства. Колко са тези пространства между двете хиксчета? Ами ако приемем, че всички символи на реда са N (колкото е входа), то без двете хиксчета - пространствата по средата са N-броя_хиксчета=N-2

Та, аз по-скоро бих подходил така:

1. Нека празните пространства от ляво първоначално са НУЛА

2. Нека празните пространства между хиксчетата първоначално са N-2

3. Цикъл за първата половина - т.е. от 0 до половината от N (N/2). За всяко завъртане:

    3.1. Изпринтирай празни пространства от ляво, хиксче, празни пространства по средата, хиксче

    3.2. Намали тези в средата с две

    3.3. Увеличи тези от ляво с едно

Тук ти си подходил по същия начин. Това, което ти "вдига" редовете код е принтирането на отделните компоненти с отделни Console.Write-ове. Учил ли си placeholders?

4. Изпринтирай статичния ред с хиксче в средата (n/2 спейсове и хиксче) като при теб.

5. Цикъл за втората половина (0 ... N/2). За всяко завъртане:

    5.1. Върни обратно състоянието на броячите - увеличи пространствата по средата с 2 (за да се раздалечи десния хикс)

    5.2. Намали външните пространства с едно (за да се раздалечи и левия хикс)

    5.3. Изпринтирай празни пространства от ляво, хиксче, празни пространства по средата, хиксче

 

Накрая ще се случи нещо такова: https://pastebin.com/QxeMn6hZ

 

0
spzvtbg avatar spzvtbg 582 Точки

namespace _01.X1
{
    using System;

    public class X1
    {
        public static void Main()
        {
            int XRepetingTimes = int.Parse(Console.ReadLine());

            for (int i = -(XRepetingTimes / 2); i <= XRepetingTimes / 2; i++)
            {
               
                if (i == 0)
                {
                    Console.WriteLine("{0}x", new string(' ', XRepetingTimes / 2));
                }
                else
                {
                    Console.WriteLine("{0}x{1}x",

                   new string(' ', Math.Abs(XRepetingTimes / 2 - Math.Abs(i))),

                   new string(' ', Math.Abs(i * 2) - 1));
                }
            }
        }
    }
}

 

ето и едно малко по различно от мен

0
29/05/2017 19:39:40