Loading...
GyokayAli avatar GyokayAli 1 Точки

Задача "Fox" - Programming Basics Exam - 20 November (Morning)

Здравейте,

Някой може ли да обясни как трябва да се сметнат очичките на "Лисицата"? Как сте определили точно колко реда заема тази част от картинката? Проблем заради, който останах на 510/600.

Благодаря предварително! :)

Тагове:
0
Programming Basics
IvanNiv avatar IvanNiv 13 Точки
Best Answer

Условието на задачата не е коректно в частта очичките на "Лисицата".

Като броя на примерните изходи е недостатъчно да се стигне еднозначно до тази логика - целочислено делене на 3.

Има поне още 2- 3 логики до които може да се стигне при предложени само 3 изхода. А за авторите на задачата те са неправилни логики.

Например:

1 вариант логика е целочислено делене на 4 + 1. Така за n =7 7/4 = 1 +1 = 2 реда, за  n =9 9/4 = 2 +1 = 3 реда и за  n =11 11/4 = 2 +1 = 3 реда;

2 вариант логика е, че при n =7, редовете са 2, а при n >7, редовете са 3;

3 вариант логика е да се сравняват звездичките в последния ред. Прави се цикъл за редовете на очите докато разликата между звездичките по средата и звездичките в двата края стане <= 1.

Защо всички тези логики да покриват изцяло предложените три изхода в задачата, а да са грешни отговори?

1
GyokayAli avatar GyokayAli 1 Точки

Благодаря за коментара колега!

Напълно съм съгласен... лично ми беше трудно да определя стойностите от дадените примери с n = 7, 9, 11.

Явно не им се e занимавало :D

1
GapoBG avatar GapoBG 15 Точки

Защо при моето решение рисувам лисцата, но Judge НЕ МИ дава 100%,

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

var eyes = Math.Sqrt(n);
eye = Math.Floor(eyes);

Какво очаква Judge от мен ?!?! Ето го решението ми ...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Fox
{
    class Fox
    {
        static void Main(string[] args)
        {
            var n = int.Parse(Console.ReadLine());
            var star = 1;
            var middleStar = n;
            var dash = (2 * n - 1);


            if (n!=2 && n>=7 && n<=57)
            {
                for (int i = 1; i <= n; i++)
                {
                    Console.WriteLine(new string('*',star) + "\\" + new string('-',dash) + "/" + new string('*',star));
                    star++;
                    dash-=2;
                }

                if (n == 7)
                {
                    star = (n - 1) / 2;
                    for (int i = 1; i <= 2; i++)
                    {
                        Console.WriteLine("|" + new string('*', star) + "\\" + new string('*', middleStar) + "/" + new string('*', star) + "|");
                        star++;
                        middleStar -= 2;
                    }
                }
                else
                {
                    star = (n - 1) / 2;
                    for (int i = 1; i <= 3; i++)
                    {
                        Console.WriteLine("|" + new string('*', star) + "\\" + new string('*', middleStar) + "/" + new string('*', star) + "|");
                        star++;
                        middleStar -= 2;
                    }
                }

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

 

0
GapoBG avatar GapoBG 15 Точки

с цело числено деление докарах сега до 80%

http://pastebin.com/cArepW3c

 

0
valkov avatar valkov 2 Точки

Тази част от картинката заема n / 3 (целочислено делене). Циклиш от 0 до < n / 3 и пресмяташ страната (лявата примерно) n / 2 + row. Поздрави.

1
20/11/2016 19:39:16
GyokayAli avatar GyokayAli 1 Точки

Много смислено! Благодаря много колега. Само n/3 ми е липсвало, останалото от кода ми вършеше очакваното.

Лека вечер!

0
stanchev1 avatar stanchev1 122 Точки

Здравей, при мен се получи с For цикъл до  (n / 3).

0
GyokayAli avatar GyokayAli 1 Точки

Да колега само n/3 ми е трябвало.

Благодаря

0
AtanasNikolov avatar AtanasNikolov 22 Точки

Целочислено деление (n на 2 + i) в цикъл, до целочислено деление n на 3. Това касае *-те в двата края, за другите звезди е остатъка.

Пример:

for (int i = 0; i < n/3; i++) 

new string('*', n/2+i)

0
GyokayAli avatar GyokayAli 1 Точки

Благодаря колега!

0
iliyants avatar iliyants 6 Точки

Ето моето решение дано ти е полезно. :)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace fox
{
    class Program
    {
        static void Main(string[] args)
        {
            int n = int.Parse(Console.ReadLine());

            var cols = 2 * n + 3;
            var lines = n * 2 - 1;
            var betweeneyes = n+1;
            var lines2 = n * 2 - 1;

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


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

 

0
i.petk0v avatar i.petk0v 56 Точки

Прилагам ти и моето решение - https://dotnetfiddle.net/SW3v3t

 Разгледай всички решения, които са ти изпратени и се опитай да схванеш логиката за решаване на такъв тип задачи - не е сложно.

0
GyokayAli avatar GyokayAli 1 Точки

Благодаря колега! :)

0
HristoSpasov avatar HristoSpasov 36 Точки

n / 3  е височината на очите :)

0
g_todorov avatar g_todorov 106 Точки

Здравей колега,

фигурката се дели на 3 части, като веднага ми направи впечатление, че 1-вата и 3-тата са идентични, тоест формулата би могла да е една и съща само сменяш местата на звездичките и тиренцата. Броя на редовете на средната част е n/3 - както вече колегите преди мен споменаха. Най-важното, което разбрах от тая задача, е че ако се вгледаме в частите на фигурката и открием идентични очертания може да ползваме една и съща формула и само да сменим местата на символите, това пести време. Пускам ти моето решение, което не е най-оптимално, но пък работи на 100%.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace UprFox
{
    class Program
    {
        static void Main(string[] args)
        {
            var n = int.Parse(Console.ReadLine());
            var countT = 0;
            var countS = 0;
            var count = 0;
            for (int i = 1; i <= n; i++)
            {
                
                Console.Write(new string('*', i) + new string('\\', 1) + new string('-', (2 * n - 1) - count)+new string('/',1) + new string('*', i));
                count= count+2;
                Console.WriteLine();
            }
            for (int i = 0; i < n/3; i++)
            {
                Console.Write(new string('|', 1) + new string('*', n / 2 + i) + new string('\\', 1) + new string('*', n - countS) + new string('/', 1) + new string('*', n / 2 +i) + new string('|', 1));
                    countS = countS + 2;
                Console.WriteLine();
            }
            for (int i = 1; i <= n; i++)
            {
                Console.Write(new string('-', i) + new string('\\', 1) + new string('*', (2 * n - 1) - countT) + new string('/', 1) + new string('-', i));
                countT = countT + 2;
                Console.WriteLine();
            }
        }
    }
}

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