Професионална програма
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