JavaScript Основи - подготовка за изпит


0

Здравейте, разглеждам задачите от миналите години (2013/2014) и на задачата за Wheels, която правя точно както е решена във видеото получавам безкраен цикъл. Не мога да проумея защо (и аз зациклих)...ако виждате грешката ми - моля да ме подсетите)

https://github.com/TelerikAcademy/JavaScript-Fundamentals/tree/2015/13.%20Exam%20preparation/Variant-1/Problem%201

Благодаря

function solve(args) {
    var s = +args[0],
        a,
        b,
        c,
        count = 0;
    for (a = 0; a <= (s / 10) + 1; a++) {
        for (b = 0; a <= (s / 4) + 1; b++) {
            for (c = 0; a <= (s / 3) + 1; c++) {
                if ((a * 10 + b * 4 + c * 3) === s) {
                    count++;
                }
            }
        }
    }
    console.log(count);
}
solve(['10']);
solve(['7']);
solve(['40']);




Отговори



1

"for (b = 0; a <= (s / 4) + 1; b++) {
            for (c = 0; a <= (s / 3) + 1; c++) {" тези два цикъла нямат край, заради "а". В техните "тела" "а" не се 

променя и затова няма изход от цикъла.


от Boray (666 точки)


1

Дефинирай една променлива, в която да запишеш резултата (all или result) за да е по-четливо като правиш проверката. Също така

for (a = 0; a <= (s / 10) + 1; a++) {

   for (b = 0; b <= (s / 4) + 1; b++) {

      for (c = 0; c <= (s / 3) + 1; c++) {

      if(.....) {....}

   }

 }

}

... от тук идва безкрайният цикъл. Погледни още веднъж решението или виж разяснението във видеото за да ти стане ясно защо се прави така. Опитай да решиш същата задачата от вторият вариант - тя се решава на същият принцип.


от monsterEnergy (954 точки)


1
Благодаря...това е защото копирах първия цикъл, и после 100 пъти проверявах, сравнявах, но това  не го видях (сякаш съм била сляпа). Ужас



1

Току що решавах Vehicles , която изглежда е абсолютно същата, ето решението ( не съм го качвал в гитхъб още )

// Copy Code Snippet Here function solve(s) { var vehicles = +s, wheelsT = 10, wheelsC = 4, wheelsTrike = 3, counter = 0; function find(n, mod) { var number = +n, ccase = +mod; // End on match or miss if (n === 0) { counter += 1; return; } else if (n < 0) { return; } if (ccase < 1) { find(n - wheelsT, 0); } if (ccase < 2) { find(n - wheelsC, 1); } if (ccase < 3) { find(n - wheelsTrike, 2); } } find(vehicles, 0); console.log(counter); }


от todorovh (2055 точки)


1
Яка рекурсия си направил :)

от rossi.bundeva (1059 точки)