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.
Пробвах по този начин само с един цикъл както ти казваш. Използвам i+1 за да сравня сегашното със следваштото число, без него няма да сравнява следващото. Вече и 2рия даден пример работи, но Judge пак дава 0/100 и само нулевите тестове ги приема.
Нямах предвид да премахнеш изобщо цикъла без да променяш логиката нататък. Това е гаранция, че ще гръмне :) Още повече, че казах, че го гледам от телефона и съм го прегледал само "диагонално" така да се каже. Не съм го пускал през компилатор.
Давам ти моето решение (дава 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;
}
И мойта логика мина най сетне. По инерция съм сложил minTimeToWait на 0 от самото начало и се чудя защо не минава случая с 0 време за чакане. А то вярно че трябва да се сложи достатъчно голямо число за да може във всички случаи да моге да се намери най-малкото (където INT_MAX играе голяма роля). Също така counter = i + 1; вместо само да го увеличавам с 1, трябва текущото +1 за да се извади позицията. Тези 2 фактора ме накараха да драпам в калта с вложения цикъл при положение, че само 1 е необходим. xd