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
boyanov avatar boyanov 65 Точки

Незнам къде ти е грешката но това е моето по-простичко решение. Можеш да си изтеглиш тестовете които използва Judge и да си дебъгнеш програмата. Аз обикновено така си намирам грешките в изпитни задачи.

0
Nexus avatar Nexus 119 Точки

Привет,

 

Опитах се да направя собствено решение но доста се затрудних. 

Твоето е чудесно. 

Ето леко модифициран код. 

http://pastebin.com/bUETqQFn

0
Filkolev avatar Filkolev 4482 Точки

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

Смени освен това Repeat с new string(). new string взима два аргумента - символ и брой повторения на символа, т.е. в началото трябва да декларираш като символи звездата и тирето.

В горната част броят на вътрешните тирета трябва да се промени: 2*(i - 1) - 1.

Дотук горната половина е ОК. С долната поиграх малко, но ми се спи и няма да мога да довърша. Утре пак ще я погледна ако не се справиш дотогава.

 

2
yankozlatanov avatar yankozlatanov 10 Точки

Смятам че грешката идва от деленеte  "n/2".

 Ето аз как съм я решил задачата  http://pastebin.com/c8P50qvM.

Моля за мнение и някакви препоръки за евентуални подобрения.

в judge системата премина успешно 100 / 100 но всепак сигурно може да се поопрости малко.

0
Filkolev avatar Filkolev 4482 Точки

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

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