Loading...

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

dmartinov avatar dmartinov 37 Точки

Vacation - while цикъл

Здравейте, judge ми дава 90 точки на моето решение и не мога да намеря какво пропускам. Толкова много го гледах, че вече зациклих жестоко и се налага да потърся помощ :) Предварително благодаря!

Джеси е решила да събира пари за екскурзия и иска от вас да ѝ помогнете да разбере дали ще успее да събере необходимата сума. Тя спестява или харчи част от парите си всеки ден. Ако иска да похарчи повече от наличните си пари, то тя ще похарчи колкото има и ще ѝ останат 0 лева.

Вход

От конзолата се четат:

  • Пари нужни за екскурзията - реално число в интервала [1.00.. .25000.00]
  • Налични пари - реално число в интервала [0.00... 25000.00]

След това многократно се четат по два реда:

  • Вид действие – текст с възможности "spend" и "save".
    • Сумата, която ще спести/похарчи - реално число в интервала [0.01… 25000.00]

Изход

Програмата трябва да приключи при следните случаи:

  • Ако 5 последователни дни Джеси само харчи, на конзолата да се изпише:
  • "You can't save the money."
  • "{Общ брой изминали дни}"
  • Ако Джеси събере парите за почивката на конзолата се изписва:

"You saved the money for {общ брой изминали дни} days."

 

 

#include <iostream>
#include <string>

using namespace std;

int main() {

    double vacationPrice, currentlySaved;
    cin >> vacationPrice >> currentlySaved;
    int daysToSpent = 0;
    int days = 0;

    while (currentlySaved < vacationPrice && daysToSpent < 5) {
        string action;
        double amount;
        cin >> action >> amount;
        if (action == "spend") {
            if (currentlySaved <= amount) {
                currentlySaved = 0;
                daysToSpent++;
            } else if (currentlySaved > amount) {
                currentlySaved -= amount;
                daysToSpent++;
            }
        } else if (action == "save") {
            currentlySaved += amount;
            daysToSpent = 0;
        }
        days++;
    }
    if (daysToSpent == 5) {
        cout << "You can't save the money." << endl;
        cout << days << endl;
    } else if (currentlySaved >= vacationPrice) {
        cout << "You saved the money for " << days << " days." << endl;
    }

    return 0;
}

0
Programming Basics with C++
spasimira25 avatar spasimira25 25 Точки
Best Answer

Ако Джеси има 150 лв, а екскурзията 100лв - никога няма да се влезе в While цикъла.
тоест:  currentlySaved (150) < vacationPrice (100)  не е вярно и не се влиза в цикъла.
Програмата просто увисва.
Ако направиш цикъла do-while, задължително ще го извъртиш поне веднъж. 

На различните линкове тестовите проверки са различни.  Поради тази причина на едното място ти дава 100/100 а на другото 90/100

1
05/07/2019 11:11:15
dmartinov avatar dmartinov 37 Точки

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

Направих го с do-while и нещата заспаха - 100/100 :) 

1
TodorKMitov avatar TodorKMitov 2 Точки

Здравейте! Бихте ли публикували решението с do - while?

0
dmartinov avatar dmartinov 37 Точки

Естествено, но понеже съм от телефона в момента, не мога да го копи-пейстна като хората. Виж дали може да го отвориш директно от линка, ако не, пиши отново и ще видя какво мога да направя 

https://judge.softuni.bg/Contests/Submissions/View/11818898

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