Loading...
Ankoun1 avatar Ankoun1 18 Точки

Exercise: Arrays - C# Fundamentals - май 2020 -10. LadyBugs

здравейте  имате ли идея за корекция

изхода съвпада в ide

40 точки

 

 

using System;
using System.Linq;

namespace dey_of_week
{
    class Program
    {
        static void Main(string[] args)
        {
            int num = int.Parse(Console.ReadLine());
            int[] f = new int[num];
            int[] arr = Console.ReadLine().Split().Select(int.Parse).ToArray();
            for (int j = 0; j < arr.Length; j++)
            {
                f[arr[j]] = 1;
            }
            string n = Console.ReadLine();

            while (n != "end")
            {
                string[] comand = n.Split();
                int comand0 = int.Parse(comand[0]);
                string comand1 = comand[1];
                int comand2 = int.Parse(comand[2]);          
                           
                    if (comand0 >= 0§§comand0 < f.Length §§ f[comand0] == 1)
                    {
                        f[comand0] = 0;
                        if (comand1 == "left")
                        {

                            while (comand0 - comand2 >= 0)
                            {                             
                                if (f[comand0 - comand2] == 0)
                                {
                                    f[comand0 - comand2] = 1;
                                   
                                    break;
                                }
                                comand0 -= comand2;
                               
                            }                             
                            
                        }
                        else if (comand1 == "right")
                        {

                            while (comand0 + comand2 < f.Length)
                            {
                                if (f[comand0 + comand2] == 0)
                                {
                                    f[comand0 + comand2] = 1;
                                    
                                    break;
                                }
                                comand0 += comand2;                                
                            }                                  
                                                        
                        }
                    }                  
              
                n = Console.ReadLine();
            }

            Console.WriteLine(string.Join(" ", f));
        }

    }
}

Тагове:
0
Fundamentals Module 15/06/2020 13:36:58
Iv_Konov avatar Iv_Konov 383 Точки

Здравей,

 

Коригирах грешки до 100/100:

(ако искаш има и по-кратки варианти при решения...)

 

Можеш да пробваш грешките предвид:

5
3
3 left -4
1 left 2
end

 

===

 for (int j = 0; j < arr.Length; j++)
            {
                if (arr[j] >= 0 && arr[j] < f.Length) // !!! - добавено!
                {
                    f[arr[j]] = 1;
                }                
            }
            string n = Console.ReadLine();

            while (n != "end")
            {
                string[] comand = n.Split();
                int comand0 = int.Parse(comand[0]);
                string comand1 = comand[1];
                int comand2 = int.Parse(comand[2]);
                bool index = true;
                for (int i = 0; i < f.Length; i++)
                {

                    if (comand0 == i && f[i] == 1)
                    {
                        f[i] = 0;
                        if (comand1 == "left")
                        {
                            if (i - comand2 > f.Length) //!!! добавено
                            {
                                break;
                            }

                            while (i - comand2 >= 0)
                            {
                                if (f[i - comand2] == 0) // !!! - if (i - comand2 > f.Length) използвах по-горе
                                {

===

 

Поздрави,

Иван

0
15/06/2020 13:44:01
Ankoun1 avatar Ankoun1 18 Точки

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

0
Ankoun1 avatar Ankoun1 18 Точки

как може да се съкрати кода?

0
Iv_Konov avatar Iv_Konov 383 Точки

Здравей, 

давам ти мой вариант (има и други...):

 

using System;
using System.Linq;

namespace _10._LadyBugs
{
    class Program
    {
        static void Main(string[] args)
        {
            int counters = int.Parse(Console.ReadLine());
            int[] initialIndexes = Console.ReadLine().Split().Select(int.Parse).ToArray();

            int[] ladybugsArr = new int[counters];

            for (int i = 0; i < initialIndexes.Length; i++)
            {
                if (initialIndexes[i] >= 0 && initialIndexes[i] < ladybugsArr.Length)
                {
                    ladybugsArr[initialIndexes[i]] = 1;
                }
            }

            string input = string.Empty;

            while ((input = Console.ReadLine()) != "end")
            {
                string[] command = input.Split();

                int ladybugIndex = int.Parse(command[0]);
                string direction = command[1];
                int flyLength = int.Parse(command[2]);

                if (ladybugIndex >= 0 && ladybugIndex < ladybugsArr.Length && ladybugsArr[ladybugIndex] == 1)
                {
                    ladybugsArr[ladybugIndex] = 0;

                    if (direction == "left")
                    {
                        flyLength = -flyLength;
                    }

                    while (true)
                    {
                        if (ladybugIndex + flyLength >= ladybugsArr.Length || ladybugIndex + flyLength < 0)
                        {
                            break;
                        }

                        if (ladybugsArr[ladybugIndex + flyLength] == 0)
                        {
                            ladybugsArr[ladybugIndex + flyLength] = 1;
                            break;
                        }

                        flyLength += flyLength;
                    }
                }
            }

            Console.WriteLine(string.Join(" ", ladybugsArr));
        }
    }
}

 

Поздрави,

Иван

0
Ankoun1 avatar Ankoun1 18 Точки

индексите за подаване на стойност 1 в масива ,който има само нули,трябва да пoсочват клетките на неговата адресирана памет и съответните индекси ,а отрицателните стойности в командите може да променят посоката на запис върху елемент със стоиност 0 към 1 по индексите на манипулирания масив и така е вероятно да се достъпи началната или последната клетка от неговата памет .Извън границите на масива незнаем дали има друг негов адрес със заделена памет ,който да е веднага след или пред първия

 

0
16/06/2020 16:34:24
Ankoun1 avatar Ankoun1 18 Точки

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

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