[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;
}
}
Здравей,
Според мен се дължи на факта, че проверките които правиш са с константи (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-else или "if- else if - else";
Успех!
Здравей,
Както е споменал колега - кода ти е нагоден за примерите. Реших я задачата преди малко ето и кода - http://pastebin.com/NCZTS3FQ . Като цяло при такива задачи е много по-лесно да се намери някаква закономерност в началото и да се изведе като променлива и след това в loop-овете да се добавят или махат някакви стойности за да се получи фигурата.