一、乘车费用(入营测试)

这篇博客记录了一位新手在解决乘车费用计算问题的过程,包括理解题目、分析思路和编写C++代码。问题涉及根据行驶距离和中途等待时间计算车费,车费计算涉及到分类讨论和数学逻辑。博主分享了可能的解决方案,并邀请读者提出错误和改进建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、乘车费用(c++)


事先说明:这个博客只是供我整理自己的思路。


题目:

    星期天上午小明乘出租车去本市的外婆家。
出租车计价方案为:2公里以内起步价是6元,超过2公里之后按1.8元/公里计价,
超过10公里之后在1.8元/公里的基础上加价50%;
另外,中途停车等候则按时间计费:1元/3分钟,(注:不满3分钟不计费)。
已知:小明到外婆家路程为n公里,中途停车等候时间总共m分钟,请计算小明到外婆家的出租车费是多少元?

输入输出格式

输入格式:
n m (n,m都是整数)

输出格式:
一个实数 (表示车费,保留1位小数)

输入输出样例

输入样例#1: 复制
8 7
输出样例#1: 复制
18.8


首先:

1. 读懂题目意思。

2.分析。

一个新手的思路:这怎么像数学题啊?(不就是分类讨论吗???)于是初中生拿出手中的笔,列出了这几条式子。
 第一种情况:2公里以内就是6元。(n<=2),[考虑m]。

 第二种情况:2公里以上,10公里及以下,(n-2)*1.8+6,(2<n<11),[考虑m]

 第三种情况:10公里以上。需要在1.8元/公里的基础上加价50%,其实就是乘以1.5。[考虑m]
           (n-10)*2.7+14.4+6,

解释:
2.7=1.8×1.5(我自己方便,代表着加价50%),(n-10)*2.7是只算10公里以上的路程的价格。

                 比如说,走21km,分两条式子,
                 这个式子算的是21-10=11(km),后面11km的价格,也就是要加价50%那部分的价格。

14.4+6是前面10公里的价格,仍要算进去。
也就是(21-10)*2.7+14.4+6。


还没结束!还有m这个条件!

另外,中途停车等候则按时间计费:1元/3分钟,(注:不满3分钟不计费)

我们可以用 m/3 整除来求出一共要加多少钱的停车费用。

如果m=7,那么要多交7/3=2(元)停车费用。         

ps:之前我傻傻的用while循环来求这个数(没救)。


代码:

1//by GAIN_HZ
include<bits/stdc++.h>
using namespace std;
int n,m;
double ans=6;//初始化为6,便于计算,下面的式子就不用加6了;
int main()
{  cin>>n>>m;
    ans+=m/3;   //停车费用,1元/3分钟,(注:不满3分钟不计费)
    if(n<=2)//第一种情况
     {printf("%.1f",ans);return 0;
     if(n<=10)//第二种情况
      {ans+=(n-2)*1.8;printf("%.1f",ans);return 0;}
      if(n>10)//第三种情况
       {ans+=(n-10)*2.7+14.4;printf("%.1f",ans);return 0;}
}
(2)
  //by GAIN_HZ
include<bits/stdc++.h>
using namespace std;
int n,m;
double ans=6;//初始化为6,便于计算,下面的式子就不用加6了;
int main()
{
    cin>>n>>m;
    ans+=m/3;//停车费用,1元/3分钟,(注:不满3分钟不计费)
    if(n<=2)//第一种情况
     {cout<<fixed<<setprecision(1)<<ans;return 0;}
     if(n<=10)//第二种情况
      {ans+=(n-2)*1.8;cout<<fixed<<setprecision(1)<<ans;return 0;}
      if(n>10)//第三种情况
       {ans+=(n-10)*2.7+14.4;cout<<fixed<<setprecision(1)<<ans;return 0;}
}
(1)和(2)差不多,都是我的程序,只有输出方式不同。
3)来自于我同学的程序,思路差不多。(感谢!)
//by XYczy
include<iostream>
include<stdio.h>
using namespace std;
long long n,m;
double ans=6; 
int main()
{
    cin>>n>>m;ans+=m/3;
    if(n>2&&n<=10)
    ans+=(n-2)*1.8;
    else if(n>10)
    ans+=(n-10)*1.8*1.5+14.4;
    printf("%.1f",ans);
    return 0;
} 

end

有错误或改进的可随时指出讨论,新手上路,多多担待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值