Софтуерно Инженерство
Loading...
Yordan.Vachev avatar Yordan.Vachev 2 Точки

Fishing

Времето се затопля, сезона за риболов наближава и всички рибари тръпнат в очакване. Един от тези рибари е
вашият стар познат Любо, който ви моли да му помогнете като напишете програма, която изчислява с каква
печалба/загуба се връща от риболовния излет. За ВСЯКА трета уловена риба, рибаря не плаща такса, а
получава пари за нея. Парите, които Любо ще получи или плати за една риба се образуват от сумата на ASCII
стойността на всеки символ от името на рибата, разделена на килограмите на рибата.
Вход
На първия ред, се чете дневната квота (броя риби, които Любо може да хване) - цяло число [1…100]
След това се четат многократно по два реда:
 името на рибата – текст
 килограмите на рибата – реално число в интервала [1.00…1000.00]
Изход
Риболовът приключва при получаване на командата "Stop" или ако се достигне дневната квота.
 Ако Любо достигне дневната квота първо да се изпише:
"Lyubo fulfilled the quota!"
След приключване на риболова на конзолата се печата един от двата реда:
 Ако Любо е спечелил пари - "Lyubo's profit from {брои уловени риби} fishes is
{спечелени пари} leva."
 Ако Любо е загубил пари – "Lyubo lost {загубени пари} leva today."
Парите да са форматирани до втората цифра след десетичната запетая.
Примерен вход и изход
Вход Изход Обяснения
3
catfish
70
carp
20
tench
14

Lyubo
fulfilled the
quota!
Lyubo's profit
from 3 fishes
is 6.21 leva.

3 - дневна квота (разрешени за улов брой риби)
Първата риба е catfish. Цената й е:
(99+97+116+102+105+115+104) / 70 = 10.54
Понеже е първа уловена риба, трябва да се плати за нея.
carp цена – 21.10 втора уловена риба, трябва да се плати за нея.
tench цена – 37.85. Понеже е трета риба получаваме 37.85.
Достигахме дневната квота печатаме съобщението и прекратяваме
риболова.

Спечелените пари са 37.85лв. Загубените са 10.54 + 21.10 = 31.64.
Понеже 37.85 > 31.64, то Любо е спечелил 6.21лв.

Вход Изход Вход Изход
10
Pike
15
Grass Carp
40
Common Rudd
7
Perch
20
Stop

Lyubo's profit
from 4 fishes
is 75.26 leva.
6
Bluefish
17.4
Garfish
14.9
Stop

Lyubo lost 94.53 leva today.


#include <iostream>
#include <string>

using namespace std;

int main(){
    int limit;
    cin >> limit;

    string name;

    double weight = 0;
    int counter = 0;
    double sum = 0;
    double fishPrice = 0;
    int fishes = 0;

    for (int i = 1; i <= limit; i++)
    {
        cin >> name;
        if (name == "Stop")
        {
            break;
        }
        fishes++;
        cin >> weight;
        fishPrice = 0;

        for (int j = 0; j < name.length(); j++)
        {
            char symbol = name[j];
            fishPrice += symbol;
        }

        counter++;
        if (counter == 3)
        {
            sum += (fishPrice / weight);
            counter = 0;
        }
        else if (counter < 3)
        {
            sum -= (fishPrice / weight);
        }
    }

    if (name == "Stop")
    {
        if (sum < 0)
        {
            cout << "Lyubo lost " << sum <<  "leva today." << endl;
        }
        else
        {
            cout << "Lyubo's profit from " << fishes << " fishes is " << sum << "leva." << endl;
        }
    }
    else
    {
        cout << "Lyubo fulfilled the quota!" << endl;
        if (sum < 0)
        {
            cout << "Lyubo lost " << sum << "leva today." << endl;
        }
        else
        {
            cout << "Lyubo's profit from " << fishes << " fishes is " << sum <<  "leva." << endl;
        }
    }

}

Трябва ми малко помощ с тази задача, някъде бъркам.

 

Тагове:
0
Programming Basics with C++
RuNNeR4142 avatar RuNNeR4142 394 Точки

Прост while цикъл с условие да не е стоп, вътре получаваш името на рибата от input и въвеждаш реално число килограми на рибата. След това правиш променлива за цената на рибата и я изчисляваш като запалиш един фор и събереш всичките символи на името от 0 до дължината на името - 1. Отчиташ рибата с брояч и проверяваш дали е трета подред или не с модулно делене, ако е трета добавяш към печалбата (пак нова променлива) цената разделена на килограмите , ако не е трета тогава е прибавяш цената/кг към загуба. После правиш проверка за квота и ако я достигне печаташ  и излизаш с брейк. В края на while задаваш нов ред за да се завърти. Изходите са лесни, сравняваш печалба и загуба, АКО ИМА загуба печаташ колко е тя, ако НЯМА загуба печаташ колко е печалбата и от колко риби. Успех ти желая!

0
20/07/2019 00:36:27