Loading...
Gdimitrov28 avatar Gdimitrov28 23 Точки

Задача 05 Coins от Programming basics Javascript May, While loop

Здравейте,

Реших си задачата по друг начин, но ми стана интересно какво точно обърках първия път и влязох в някакъв безкраен цикъл. Решението си работи ако му подам 2 или 1 или 0.50 дори ама при число от рода на 2.23 прави проблем. Още на първия ' if ' вместо да ми извади 2 единици ми вади 0.00000002 или нещо такова от числото, което е явно и проблемът. Най - вероятно нещо не съм догледал и е тъпа грешка, но гледам от час вече и ще съм благодарен някой ако ми обясни какво точно става. Благодаря предварително.

 

https://pastebin.com/57a6NjuL

 

0
Programming Basics
willystyle avatar willystyle 2472 Точки
Best Answer

Това е понеже работиш с реални числа и има закръгляне, понеже те не се представят като точни степени на 2, затова например пробвай console.log(0.2 + 0.1) дава 0.30000000000000004 и твоя цикъл влиза в положение >0 no < 0.01 и зацикля безкрай.

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

https://pastebin.com/ZCubKKc9

Все пак ще ти предложа рефактор с по-кратък код:

function solve(input) {
    let amount = Math.round(input.shift() * 100);
    let coins = 0;
    while (amount > 0) {
        if (amount >= 200) amount -= 200
        else if (amount >= 100) amount -= 100
        else if (amount >= 50) amount -= 50
        else if (amount >= 20) amount -= 20
        else if (amount >= 10) amount -= 10
        else if (amount >= 5) amount -= 5
        else if (amount >= 2) amount -= 2
        else amount = amount - 1
        coins++;
    }
    console.log(coins);
}

 

0
10/06/2019 19:56:57
Gdimitrov28 avatar Gdimitrov28 23 Точки

Благодаря, въобще не ми беше хрумвало да мисля как се представят числата, мислех, че някъде съм объркал нещо в писането просто. Много ми помогна обяснението.

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