Професионална програма
Loading...
+ Нов въпрос
ivan.d.uzunov avatar ivan.d.uzunov 22 Точки

Truck Tour from Stacks and Queues - Exercise 20/100

Колеги, реших да започна да пререшавам по-трудните задачи от упражненията от CSharpAdvanced. Нещо зацепих на тази. Знам, че има видео с решението и, но честно казано не знам защо не минава моят код. 20/100 e, като втория тест е Time limit, а другите три Incorrect answer. 

 

https://pastebin.com/j36YXkQJ

https://softuni.bg/downloads/svn/csharp-advanced/May-2017/01.%20CSharp-Advanced-Stacks-And-Queues/01.%20CSharp-Advanced-Stacks-And-Queues-Exercises.docx

 

Благодаря!

Тагове:
0
C# Advanced
Tanyo avatar Tanyo 152 Точки
Best Answer

Ще ти постна моето решение на тази задача... идеята ми е проста... 

Още при входа вадя от петрола който получавам дистанцията до следващия...

Записвам в един масив... (можеш да го записваш и във опашка и да си направиш един каунтър за позицията до която стигнеш... просто аз го напъхах в масив за да си използвам индекса, не за друго... )

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

В противен случай, добавям стойността към следваща (допълвам резервоара) ...

Накрая печатам индекса който съм запазил.

 

using System;
using System.Linq;
				
public class Program
{
	public static void Main()
	{
		    int n = int.Parse(Console.ReadLine());
            int[] pacha = new int[n];
            for (int i = 0; i < n; i++)
            {
                var line = Console.ReadLine().Split(' ').Select(int.Parse).ToArray();
                pacha[i] = line[0] - line[1];
            }

            int indix = 0;
            for (int i = 0; i < pacha.Length - 1; i++)
            {
                if (pacha[i] < 0)
                {
                    indix = i + 1;
                }

                if (pacha[i] > 0)
                {
                    pacha[i + 1] = pacha[i] + pacha[i + 1];
                }
            }
            Console.WriteLine(indix);
      }  
}

 

2
23/08/2017 20:24:12
tiapko avatar tiapko 31 Точки

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

https://github.com/tiapko/CSharp-Advanced/blob/master/02.Exercises-Stacks%D0%90ndQueues/06.TruckTour.cs

0
23/08/2017 23:05:16
anton_mironov avatar anton_mironov 19 Точки

@Tanyo, благодаря колега, но нали уж смисъла на упражнението е да използваме опашки...

Ето моят код с опашка, който за жалост дава също само 20 точки... Идея?

        static void Main(string[] args)
        {
            int input = int.Parse(Console.ReadLine());
            var queue = new Queue<int>();
            int iteration = 0;
            int totalFuel = 0;

            for (int i = 0; i < input; i++)
            {
                string[] line = Console.ReadLine().Split(' ');
                int calc = int.Parse(line[0]) - int.Parse(line[1]);
                queue.Enqueue(calc);
            }

            for (int i = 0; i < queue.Count; i++)
            {
                int firstNum = queue.Dequeue();
                if (firstNum + totalFuel <= 0)
                {
                    queue.Enqueue(firstNum);
                    iteration++;
                }
                else
                {
                    totalFuel += firstNum;
                }
            }
            Console.WriteLine(iteration);
        }
    
 

0
Jaihertz avatar Jaihertz 4 Точки

Реално от условието на тази задача не става ясно, дали пълен кръг трябва да се завърти. Аз бях разбрал че е нужна опашка, тъй като тръгването само от помпа на определена позиция би осигурило успешното пълно завършване с финиширане на нея. Това предполага прехвърляне на проверените помпи в края на опашката, тъй като по-късно пак ще участват за пълния кръг. В крайна сметка задачата се оказва линейна: ходиш си по масивче и гледаш от коя точка ще се снабдяваш с гориво, да добуташ до края му. Принтираш точката и това е. След като нанесох корекциите expectation VS reality, пускам тука и моят код, за който си бие главата с условието :)

 

using System;
using System.Linq;

namespace EX07_Truck_Tour
{
    class CalculateCircle
    {
        static void Main()
        {
            int N = int.Parse(Console.ReadLine());

            int[] pumps = new int[N];

            for (int i = 0; i < N; i++)
            {
                int[] integers = Console.ReadLine().Split().Select(int.Parse).ToArray();
                pumps[i] = integers[0] - integers[1];
            }

            int current = 0;
            int position = 0;

            for (int i = 0; i < N; i++)
            {
                current += pumps[i];

                if (current < 0)
                {
                    current = 0;
                    position = i + 1;
                }
            }
            Console.WriteLine(position);
        }
    }
}

 

ПС: Ето Ви и още едно чекче, за да си го ползвате в дебъгването. Очаква се да принтира 4 :)

 

6
1 5
10 3
3 4
2 9
10 2
5 3

 

1
18/05/2019 14:39:54
Ina_K avatar Ina_K 3 Точки

Златен си, човече! С твоето чекче си намерих пропуск и от 40/100 стигнах 100/100.

1
v.angelov92 avatar v.angelov92 7 Точки

Благодаря за подсказката. От описанието се разбира точно както сте го описали в началото. Доста глупаво условие са дали. Поздрави.

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