Task "Lines" - Telerik Academy Exam 1 @ 7 Dec 2011 Morning


0
Колеги,
някой може ли да ми помогне за тази задача. Дава ми 90 точки в bgcoder.com и не мога да открия грешката си.
Благодаря предварително.
Поздрави,
Румяна Банкина



Отговори



0
Не си написала за какво да се помага. Какъв по-точно е проблема?

от vg_iliev (0 точки)


1
Има тема за конкретната задача http://forums.academy.telerik.com/31327/%D0%B4%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%BE-%D0%BF%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0-%D0%B7%D0%B0-%D1%82%D0%B5%D1%81%D1%82-%D0%B8%D0%B7%D0%BF%D0%B8%D1%82-lines-straight-sequences

от vlad_karamfilov (4595 точки)


0
Благодаря, но там са доста различни от моето решение:(

от bankina (268 точки)


6
Най-лесният начин е да погледнеш кой тест не ти дава точки, в архивният файл дето са условията на задачите има директория с тестовете, поглеждаш какъв е входа и какъв е очаквания изход и дебъгваш :) Иначе твърде вероятно е грешката да е при случай в който най-дългата линия е с дължина 1, в такъв случай я преброяваш ненужно 2 пъти (един път хоризонтално и 1 път вертикално) и ако не си се застраховала при този случай изходът ще е грешен. Това би могло да се оправи с нещо от вида на
if(maxLength == 1)
counter = counter/2;
като counter e променливата в която държиш броя на намерените линии с максимална дължина , надявам се да помогне поне на някой, че доста издрасках ;)

от kirotab (219 точки)


0
Благодаря. Ще проверявам отново.

от bankina (268 точки)


0
Здравей,
решение на задачата, лесна логика:
http://pastebin.com/jzeZxC82

от Dimov (907 точки)


0
най трудната за мен задача /от тези, които реших/ странно е че имаш 90 точки, защото ако броиш по два пъти когато макс дължина е 1 има два такива теста т.е. трябва да имаш 80 точки ако това си изпуснала.
Аз решавах задачата, като печатах на конзолата резултата и аз броях и гледах какво ми дава алгоритъма. От 20 през 50 на 80 точки стигнах и така го предадох.

от makmidov (598 точки)


0

 

Аз съм пропуснала да постна решението. това ми дава 90 точки:
 
using System;
 
class Lines
{
    static void Main()
    {
        int[,] field = new int[8, 8];
        for (int row = 0; row < 8; row++)
        {
            int currentNumber = int.Parse(Console.ReadLine());
            string binaryNumber = Convert.ToString(currentNumber, 2);
            binaryNumber = binaryNumber.PadLeft(8, '0');
 
            for (int col = 0; col < 8; col++)
            {
                switch (binaryNumber[col])
                {
                    case '0': field[row, col] = 0; break;
                    case '1': field[row, col] = 1; break;
                    default: break;
                }
            }
        }
 
        int longest = 0;
        int longestCount = 0;
        for (int row = 0; row < 8; row++)
        {
            for (int col = 0; col < 7; col++)
            {
                int currCount = 0;
                if (field[row, col] == 1)
                {
                    while (((col + 1) < 8) && (field[row, col] == 1))
                    {
                        col++;
                        currCount++;
                    }
                    if ((col + 1) >= 8)
                    {
                        if ((field[row, 7] == field[row, 6]) && (field[row, 6] == 1))
                        {
                            currCount++;
                        }
                    }
                }
 
                if (currCount > longest)
                {
                    longestCount = 1;
                    longest = currCount;
                }
                else if (currCount == longest)
                {
                    longestCount++;
                }
 
            }
        }
        for (int col = 0; col < 8; col++)
        {
            for (int row = 0; row < 7; row++)
            {
                int currCount = 0;
                if (field[row, col] == 1)
                {
                    while (((row + 1) < 8) && (field[row, col] == 1))
                    {
                        row++;
                        currCount++;
                    }
                    if ((row + 1) >= 8)
                    {
                        if ((field[7, col] == field[6, col]) && (field[6, col] == 1))
                        {
                            currCount++;
                        }
                    }
                }
 
                if (currCount > longest)
                {
                    longestCount = 1;
                    longest = currCount;
                }
                else if (currCount == longest)
                {
                    longestCount++;
                }
 
            }
        }
        Console.WriteLine(longest);
        Console.WriteLine(longestCount);
    }
}
 

от bankina (268 точки)


2
Здравей,
Трябва да въртиш и вътрешните цикли от 0 до 7. Трябва да махнеш и едната проверка, или да я преправиш - мился, че ако я махнеш решението ти става много хубаво, но... сега вече ти дава 80/100, както и трябва да бъде.
Защото си пропуснала случая когато макс. дължина е 1 - товята задача брой 1 по вертикала и хоризонтала. Помисли как да решиш този случай
http://pastebin.com/n7HewZDH - виж коментарите в/у кода.

от Stefanpu (404 точки)


0
Благодаря за съдействието. Ще разгледам коментарите върху кода

от bankina (268 точки)