Професионална програма
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 2 Точки

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

1