Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

Filipbg avatar Filipbg 26 Точки

JA1 Task 3 Bus

#include <iostream>
#include <array>
using namespace std;

int main()
{
    int busArrivalTimes = 0;
    int minTimeToWait = 0;
    int currentMinTimeToWait = 0;
    array<int, 20> busArrivalList = {0};
    int trainDeparture = 0;
    int counter = 0;
    cin >> busArrivalTimes;
    for(int i = 0; i < busArrivalTimes; ++i)
    {
        cin >> busArrivalList[i];
    }
    cin >> trainDeparture;
    for(int i = 0; i < busArrivalTimes; ++i)
    {
        for(int n = i + 1; n < busArrivalTimes; ++n)
        {
            minTimeToWait = trainDeparture - busArrivalList[i];
            if((trainDeparture - busArrivalList[n]) < minTimeToWait)
            {
                if(trainDeparture - busArrivalList[n] >= 0 || trainDeparture - busArrivalList[n] == 0)
                {
                   minTimeToWait = trainDeparture - busArrivalList[n];
                   ++counter;
                }
            }
        }
    }
    cout << counter;
    return 0;
}

Нямам представа какви функции тряба да бъдат използвани за да се реши задачата. Със знанията до това ниво, не мисля че има начин. :/
Първия пример минава, но Judge не дава никакви точки тъй като е за zero test.

Тагове:
0
C++ Fundamentals
dmartinov avatar dmartinov 37 Точки
Best Answer

Аз съм решил задачата по подобен начин и си на прав път. Но ми се струва, че си усложнил проверките твърде много. Може да си спестиш вложения for цикъл в който казваш n=i+1 и съответно накрая може да минеш само с една if проверка.

Прегледай и тази тема в която доста обсъждахме тази задача https://softuni.bg/forum/27784/90-100-zadacha-bus-cplusplus

0
Filipbg avatar Filipbg 26 Точки
    for(int i = 0; i < busArrivalTimes; ++i)
    {
        minTimeToWait = trainDeparture - busArrivalList[i];
        if((trainDeparture - busArrivalList[i+1]) < minTimeToWait)
        {
            minTimeToWait = trainDeparture - busArrivalList[i+1];
            ++counter;
        }
    }

Пробвах по този начин само с един цикъл както ти казваш. Използвам i+1 за да сравня сегашното със следваштото число, без него няма да сравнява следващото. Вече и 2рия даден пример работи, но Judge пак дава 0/100 и само нулевите тестове ги приема.  

0
dmartinov avatar dmartinov 37 Точки

Нямах предвид да премахнеш изобщо цикъла без да променяш логиката нататък. Това е гаранция, че ще гръмне :) Още повече, че казах, че го гледам от телефона и съм го прегледал само "диагонално" така да се каже. Не съм го пускал през компилатор. 

Давам ти моето решение (дава 100 от 100 точки), за да сравниш моята и твоята логика, които са доста сходни: 

#include <iostream>
#include <array>

void arrayPopulation(int busTimes, int trainDeparture) {

    int bestTime = 0;
    int checkSum = INT_MAX;
    int busSchedule [20] = {0};

    for (int i = 0; i < busTimes; ++i) {
        std::cin >> busSchedule[i];
    }

    std::cin >> trainDeparture;

    for (int i = 0; i < busTimes; ++i) {
        if (trainDeparture - busSchedule[i] >= 0 && trainDeparture - busSchedule[i] <= checkSum) {
            checkSum = trainDeparture - busSchedule[i];
            bestTime = i + 1;
        }
    }

    std::cout << bestTime;
}

int main() {

    int busTimes = 0;
    int trainDeparture = 0;

    std::cin >> busTimes;

    arrayPopulation(busTimes, trainDeparture);

    return 0;
}

0
Filipbg avatar Filipbg 26 Точки

И мойта логика мина най сетне. По инерция съм сложил minTimeToWait на 0 от самото начало и се чудя защо не минава случая с 0 време за чакане. А то вярно че трябва да се сложи достатъчно голямо число за да може във всички случаи да моге да се намери най-малкото (където INT_MAX играе голяма роля). Също така counter = i + 1; вместо само да го увеличавам с 1, трябва текущото +1 за да се извади позицията. Тези 2 фактора ме накараха да драпам в калта с вложения цикъл при положение, че само 1 е необходим. xd

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