一、乘车费用(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;
}