C++ 计算巴士每日利润(小错误?

C++ Calculate bus daily profit (minor mistakes?)

本文关键字:错误 计算 每日 C++      更新时间:2023-10-16

我正在尝试在C++中解决某个编程练习(我是新手)。该练习需要计算公共汽车(公共交通)的每日利润,并打印利润最高的公共汽车的名称,以及其每日利润和所有公共汽车的总利润的总和。但是,根据乘客的不同,门票有不同的类型(1,2,3,4,5或6):1是满的,满=3,2是教师=25.5,3是学生=22.10,4,5,6是免费的。这是我的代码:

#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;
}

这段代码似乎通过了所有基本测试,但是它有问题,因为它没有被接受。如果您能帮助我找到错误,我将不胜感激。

两个问题,尽管第二个问题可能无关紧要,因为我认为除了计算之外没有使用total_amount

daily_profit在使用前永远不会初始化。

您的total_amount值将不正确,请执行以下操作:

   if(ticket=='1')   
    {
        full_ticket=full_ticket+30;                 
        total_amount=total_amount+full_ticket;
    }

在上面的代码中,您将full_ticket的成本添加到我假设的出售完整门票所赚取的运行总收入中。然后,将该值添加到total_amount 中。问题是,您实际上只想在total_amount中添加 30,因为您每次添加时都会计算每张售出的门票的价值,而不是一张票的价值。

首张票:full_ticket = 30, total_amount = 30票第二张票:full_ticket = 60, total_amount = 90第三张票:full_ticket = 90, total_amount = 180

对于其他票价,此模式重复出现。