Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

denidev avatar denidev -1 Точки

03. Wine Glass. Всичко изглежда правилно, но judge'a ми дава само 10 точки?

using System;

class Program
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());

        for (int i = 0, count = 0; i < n / 2; i++)
        {
            Console.WriteLine("{0}{1}{2}{3}{0}", new string('.', 0 + count), new string('\\', 1), new string('*', (n - 2) - 2 * count), new string('/', 1));
            count++;
        }

        for (int i = 0; i < (n + 1) / 3; i++)
        {
            Console.WriteLine("{0}{1}{1}{0}", new string('.', (n - 1) / 2), new string('|', 1));
        }

        for (int i = 0; i < n / 6; i++)
        {
            Console.WriteLine(new string('-', n));
        }
    }
}

Това ми е кода.

http://gyazo.com/575c762062c5f98b004ca1a81fc8f8c3 - Условието.

Тагове:
0
Programming Basics 15/07/2015 20:54:30
djc_bg2015 avatar djc_bg2015 923 Точки

Здравей,

нямам възможност в момента да пусна кода ти през VS, но можеш да погледнеш дали случайно това не е проблема:

https://softuni.bg/forum/4880/Judge-Wine-Cup

Поздрави!

0
denidev avatar denidev -1 Точки

С всички инпути изглежда добре, не мисля, че там е проблема. Благодаря все пак.

0
15/07/2015 20:58:45
djc_bg2015 avatar djc_bg2015 923 Точки

Проблмът е точно там, пробвай с вход 16 ще си видиш грешката,

Височината на || трябва да е : ((16/2) - 2) = 6 (а при теб е 5)
 

On the next (N/2)-2 rows, if N >= 12 or (N/2)-1 rows, if N < 12

Поздрави!

3
15/07/2015 21:52:29
denidev avatar denidev -1 Точки

Мисля, че разбрах какво имаш предвид.

Промених кода от :

for (int i = 0; i &lt; (n + 1) / 3; i++)

на :

for (int i = 0; i &lt; (n /2) -2 ; i++)

И сега стъблата ги показва както трябва, мисля. На 16 дава 6. Но сега редовете с тиренца най-отдолу станаха три. Мога ли някак с вложени if'ове да оправя проблема ? Предложението на колегата отдолу ми се струва сложно за мен, тъй като аз съм още в началото на "Programming Basics", но реших да започна да мъча задачите и "третите" ми се струват лесни.

Поздрави!

0
Simooo93 avatar Simooo93 81 Точки

Проблемът е, че не си си имплементирал това, което ти е дадено по условие. Тиренцата ти накрая трябва да бъдат 2 реда, ако n >= на 12 и един ред, ако n<12; Ти си вкарал код n/ 3, което връща доста повече тиренца редове, а съкращава от дръжката на чашата. Ето как промених кода, за да дава 100 точки. 

http://pastebin.com/0UiJA9yL

1
denidev avatar denidev -1 Точки

Окей, до колкото разбрах съм имал две грешки.

1. Грешка при пресмятането за стълбацата на чашата. - Fixed.

2. Грешка при принтирането на най-долните редове - ако n < 12, да принтира ЕДИН ред, иначе да принтира ДВА реда. - Fixed.

Успях да си го направя по мой си начин и стигнах до 80 точки. Някъде се губят още 20.

Ето и новия код :

using System;

class Program
{
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());

        for (int i = 0, count = 0; i &lt; n / 2; i++)
        {
            Console.WriteLine("{0}{1}{2}{3}{0}", new string('.', 0 + count), new string('\\', 1), new string('*', (n - 2) - 2 * count), new string('/', 1));
            count++;
        }

        for (int i = 0; i &lt; (n /2) -2 ; i++)
        {
            Console.WriteLine("{0}{1}{1}{0}", new string('.', (n - 1) / 2), new string('|', 1));
        }

        if (n &lt; 12)
        {
             Console.WriteLine(new string('-', n));
        }
        else if (n == 12)
        {
            for (int i = 0; i &lt; n / n + 1; i++)
            {
                Console.WriteLine(new string('-', n));
            }
        }
        else
        {
            for (int i = 0; i &lt; n / n + 1; i++)
            {
                Console.WriteLine(new string('-', n));
            }
        }
    }
}

 

 

0
denidev avatar denidev -1 Точки

Проблема идва от там, че

for (int i = 0; i &lt; (n /2) -2 ; i++)

Не е валидно за 6. Защото 6 / 2 = 3, 3 - 2 = 1. А на нас ни трябва 2.

0
Simooo93 avatar Simooo93 81 Точки

Отново не си разбрал условието, дръжката на чашата при n по-малко от 12 е n / 2 - 1. Тоест 6 / 2 = 3 и 3 - 1 = 2!. 

За n равно на 12 или по-голямо от 12 е n/2 - 2. Тъй като дължината на цялата ти картинка е n, тоест при 12 имаш 12 реда, то последните ти редове с тиренцата са толкова на брой, че да запълнят картинката. Тоест при 12 първата част на картинката ти е n / 2, втората е n / 2 - 2, а за да се допълни картинката остават още два реда за тиренца. Тъй като условието за числа равни на 12 или по-големи е долната половина да е n / 2 - 2, то винаги редовете отдолу с тиренца са 2, а за числа по-малки от 12 е едно, тъй като условието за дръжката на чашата n / 2 - 1.

Поздрави ! 

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