Loading...
MiroslavDinev avatar MiroslavDinev 115 Точки

Tech Module 4.0 - Lists-More Exercise - Car Race

Здравейте, опитвам се да реша задача Car race, но за съжаление я докарвам само 90/100 и не мога да открия причината. Пробвах с промяна на типа данни или на проверките, но отново не достигам 100/100. Ще съм благодарен, ако някой успее да намери проблема в решението ми или поне даде негово напълно вярно решение.

Условие: 

2.Car Race

Write a program to calculate the winner of a car race. You will receive an array of numbers. Each element of the array represents the time needed to pass through that step (the index). There are going to be two cars. One of them starts from the left side and the other one starts from the right side. The middle index of the array is the finish line. (The number of elements of the array will always be odd). Calculate the total time for each racer to reach the finish (the middle of the array) and print the winner with his total time. (The racer with less time). If you have a zero in the array, you have to reduce the time of the racer that reached it by 20% (from the time so far).

Print the result in the following format "The winner is {left/right} with total time: {total time}"

Example

Input

Output

29 13 9 0 13 0 21 0 14 82 12

The winner is left with total time: 53.8

Comment

The time of the left racer is (29 + 13 + 9) * 0.8 (because of the zero) + 13 = 53.8

The time of the right racer is (82 + 12 + 14) * 0.8 + 21 = 107.4

The winner is the left racer, so we print it

 Моето решение: https://pastebin.com/NhCujwzP

Благодаря на отзовалите се!

Тагове:
0
Programming Fundamentals
svetoslav_0 avatar svetoslav_0 1009 Точки
Best Answer

Не ми допадна начина по който пълниш списъка secondRacerNums, затова реших да заменя цикъла с такъв, който се върти наобратно и взе, че стана. Явно при теб не минава някакъв частен случай. Ето какво направих аз:

for (int i = numbers.Count - 1; i >= numbers.Count / 2 + 1; i--)
{
    secondRacerNums.Add(numbers[i]);
}
2
07/01/2019 21:51:25
MiroslavDinev avatar MiroslavDinev 115 Точки

Благодаря за помоща, с горното стана 100. Изглежда наистина числата в списъка secondRacerNums трябва да се пълнят наобратно, иначе бърка някъде сметките.

0
YanaStamenova avatar YanaStamenova 21 Точки

Причината е в нулите, тъй като трябва да вадиш 20% от current time. Ако събираш отляво надясно current time-а ти е различен. Съответно тези 20% се вадят от различно число. 

1
AlucardDracula avatar AlucardDracula 416 Точки
for (int i = secondRacerNums.Count-1; i >= 0; i--) {
    int currNum = secondRacerNums[i];
    secondSum += currNum;
    if (currNum == 0) {
        secondSum = secondSum * 0.8;
    }
}
			

Започни от края на масива smiley

1
MiroslavDinev avatar MiroslavDinev 115 Точки

Благодаря за помоща. Получиха се нещата със задружни усилия.

0
MiroslavDinev avatar MiroslavDinev 115 Точки

Дори не се бях замислил за решение със стринг surprise Определено е доста интересен подход.

0
TeMePyT avatar TeMePyT 142 Точки

Това ако е решение със стринг... После ги парсва към числа, нали? То винаги се подава стринг, това дали ще го запазиш като такъв масив и ще ги парсваш после, или ще си ги парснеш при четенето и ще ги запазиш в масив от числа е едно и също.

0
anton_fotev avatar anton_fotev 9 Точки

На същата задача пробвах по-долу дадения код и ми дава 60/100.

using System;
using System.Collections.Generic;
using System.Linq;
                    
public class Program
{
    public static void Main()
    {
        int[] rise = Console.ReadLine()
            .Split()
            .Select(int.Parse)
            .ToArray(); 
        
         double firstSumTime = GetSumofAllEtap (rise); 
        
         rise = rise
             .Reverse()
             .ToArray();
        
         double secondSumTime = GetSumofAllEtap (rise);
         
         if (firstSumTime <= secondSumTime)
         {
          Console.WriteLine("The winner is left with total time: {0}", firstSumTime); 
         }
        else
        {
            Console.WriteLine("The winner is rigth with total time: {0}", secondSumTime); 
        }        
    }
    
    public static double GetSumofAllEtap (int[] rise)
    {
      int halfIndex = rise.Length / 2; 
        
      double sum = 0.0;    
        
        for (int i = 0; i < halfIndex; i++)
        {
          if (rise[i] == 0)
          {
             sum = sum * 8 / 10;
          }
          else
          {
            sum += rise[i];      
          }
            
         // Console.WriteLine("rise[{0}] = {1}, sum = {2}", i, rise[i], sum);                  
        }        
        return sum;
    }
}

// 29 13 9 0 13 0 21 0 14 82 12

Някой може ли да помогне да видя къде греша?

0
knoteva avatar knoteva 1081 Точки

Виж как си написал "right".

0
anton_fotev avatar anton_fotev 9 Точки

Мерси. Тази печатна грешка ми коства два часа напразни тестове.

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