Loading...
a.polyanska avatar a.polyanska 107 Точки

[Exam Problems] C# Basics - the Explorer

Здравейте,

Опитвам се да реша задачата, като създавам метод, който рисува съответния ред, след като му се зададат параметри. Отпечатва ми, обаче повече "_", отколкото смятам, че съм задала. Някой вижда ли къде е грешката?

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

//At the only input line you will be given
//the width of the diamond. The char that forms the outline of the diamonds is '*'
//and the surrounding parts are made of '-' (see the examples).
//Your task is to print a diamond of given size n.
class Explorer
{
    static void Main(string[] args)
    {
        int n = int.Parse(Console.ReadLine());
        string form = "*";
        string fill = "_";
      
        Console.Write(Repeat(fill,n/2));
        Console.Write(form);
        Console.WriteLine( Repeat(fill, n / 2) );
        
        for (int i = 2; i <= n / 2 + 1; i++)
        {
            Console.Write(Repeat(fill, n / 2 - (i - 1)));
            Console.Write(form);      
            Console.Write(Repeat(fill,i - 1));
            Console.Write(form);
           Console.WriteLine(Repeat(fill, n / 2 - (i - 1)) );
        }

        for (int i = n / 2 + 2; i < 2; i--)
        {
            Console.Write(Repeat(fill, n / 2 - (i - 1)));
            Console.Write(form);
            Console.Write(Repeat(fill, i - 1));
            Console.Write(form);
            Console.WriteLine(Repeat(fill, n / 2 - (i - 1)));
        }

        Console.Write(Repeat(fill, n / 2));
        Console.Write(form);
        Console.WriteLine(Repeat(fill, n / 2));

    }
    public static string Repeat(string str, int count)
    {
        for (int i = 1; i <= count; i++)
        {
            Console.Write("{0}", str);
        }
        return str;
    }
}

Тагове:
0
Programming Basics
Nexus avatar Nexus 119 Точки

Здравейте,

 

Мога ли да помоля и аз за малко насока. 

Докарах кода си до положение да работи с n=5 и n=7.

За по-високи стойности обаче се получават разминавания.

Моля за съвет как да едитна ...

http://pastebin.com/JGCRQbVq

0
21/11/2014 19:05:05
dimmarinov avatar dimmarinov 29 Точки

Здравей,

Според мен се дължи на факта, че проверките които правиш са с константи (3 и 4 -> n-3; n-4). А те вършат работа само за частни случаи, както е с n=5 или 7. Т.к не съм сигурен на 100% дали съм разбрал логиката, която си вложил не се ангажирам да ти дам по-точен съвет как да ги изразиш.  Но ми се струва, че с увеличаване стойността на n, ще ти се налагат все повече проверки.
На ред 31 ти липсва оператор и така част от кога ти не се изпълнява. Може липсващият statement да е проблема :)

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

А това, което мога да те посъветвам е:

  • опитай се да намериш завсимостта и да я изразиш чрез динамичните проленливи.
    Аз опитах да ги заместя с n-3 -> n - n/2 -1 и n-4 -> n-n/2-2, но не ми се получи. Но може да ги ползваш като отправна точка ;)
  • да изпозлваш не само if (имаш няколко един след друг), но и if - else;
  • използвай по-малко вложени "ифове" (if statement) - много е лесно понякога човек да се обърка кой къде свършва. Разбира се понякога е наложително и няма как :) Но в случая може да ползваш:
    if-else или "if- else if - else";
  • и последно. По условие n трябва да се въвежда от конзолата.

    Успех!
1
21/11/2014 22:42:07
Kamigawa avatar Kamigawa 750 Точки

Здравей,

Както е споменал колега - кода ти е нагоден за примерите. Реших я задачата преди малко ето и кода - http://pastebin.com/NCZTS3FQ . Като цяло при такива задачи е много по-лесно да се намери някаква закономерност в началото и да се изведе като променлива и след това в loop-овете да се добавят или махат някакви стойности за да се получи фигурата.

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