Существует определенное упражнение по программированию, которое я пытаюсь решить на C++ (я новичок в нем). Упражнение требует рассчитать суточную прибыль автобусов (общественный транспорт) и распечатать название автобуса, которое принесло максимальную прибыль, а также сумму его ежедневной прибыли, а также общую прибыль, полученную всеми автобусами. Однако билеты имеют разные типы (1,2,3,4,5 или 6) в зависимости от пассажиров: 1 полный и полный = 3, 2 для учителей = 25,5, 3 для студентов = 22,10 и 4,5 , 6 являются бесплатными. Вот мой код:C++ Рассчитайте ежедневную прибыль автобуса (незначительные ошибки?)
#include <iostream>
#include <string.h>
#include <iomanip>
using namespace std;
int main()
{
int n, j;
double full_ticket=0, teacher_ticket=0, std_ticket=0, foreign_ticket=0, polis_card=0, elderly_card=0; //declare tickets
char ticket, c;
string bus, hBus; //declare strings for bus names
double fuel_amount, fuel_price, daily_profit,busProfit, hAmount, total_amount;
cin>>n>>fuel_price;
for (j=1;j<=n;j++)
{
cin>>bus>>fuel_amount; //read string and amount of fuel consumed
do
{
cin>>ticket>>c; //read ticket type and c is comma, after each ticket there **needs** to be a comma
if(ticket=='1')
{
full_ticket=full_ticket+30;
total_amount=total_amount+full_ticket;
}
if(ticket=='2')
{
teacher_ticket=teacher_ticket+25.5;
total_amount=total_amount+teacher_ticket;
}
if(ticket=='3')
{
std_ticket=std_ticket+22.10;
total_amount=total_amount+std_ticket;
}
if(ticket=='4')
{
foreign_ticket=foreign_ticket+0;
total_amount=total_amount+foreign_ticket;
}
if(ticket=='5')
{
polis_card=polis_card+0;
total_amount=total_amount+polis_card;
}
if(ticket=='6')
{
elderly_card=elderly_card+0;
total_amount=total_amount+elderly_card;
}
}while(c!=';'); //termination of do-while loop when it reads a semicolon
//calculate sum per each bus
busProfit=(full_ticket+teacher_ticket+std_ticket+foreign_ticket+polis_card+elderly_card)-(fuel_amount*fuel_price);
daily_profit=daily_profit+busProfit; //calculate daily profit of buses
if(busProfit>hAmount) //set condition for highest bus
{
hAmount=busProfit;
hBus=bus;
}
full_ticket=0; teacher_ticket=0; std_ticket=0; foreign_ticket=0;polis_card=0;elderly_card=0;
//set variables to 0 before loop starts again
}
cout<<fixed<<setprecision(2);
cout<<hBus<<" "<<hAmount<<endl; //print highest bus and highest amount
cout<<daily_profit; //print daily profit
return 0;
}
Этот код, кажется, проходят все элементарные тесты, однако есть что-то не так с ним, так как он не был принят. Я был бы очень признателен, если бы вы могли помочь мне найти ошибки.
Мы будем очень признательны, если вы сможете использовать отладчик в своем коде. Выполняйте каждую инструкцию по одному и наблюдайте значения переменных. Пожалуйста, отредактируйте свое сообщение, указывающее, какая из этих заявлений вызывает проблему и почему. –
@ThomasMatthews верен, отладчик укажет на определенную строку кода, вызывающую проблему. Запустите отладчик и опубликуйте строку, которая вызывает проблемы. –
Оператор 'switch' может быть более читаемым, чем несколько операторов' if'. –