前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >问题 B: 出租车费(详细讲解)

问题 B: 出租车费(详细讲解)

作者头像
杨鹏伟
发布2021-07-01 10:26:12
8020
发布2021-07-01 10:26:12
举报
文章被收录于专栏:ypwypw

题目: 某市出租车计价规则如下:起步4公里10元,即使你的行程没超过4公里;接下来的4公里,每公里2元;之后每公里2.4元。行程的最后一段即使不到1公里,也当作1公里计费。 一个乘客可以根据行程公里数合理安排坐车方式来使自己的打车费最小。 例如,整个行程为16公里,乘客应该将行程分成长度相同的两部分,每部分花费18元,总共花费36元。如果坐出租车一次走完全程要花费37.2元。 现在给你整个行程的公里数,请你计算坐出租车的最小花费。

**输出:**输入包含多组测试数据。每组输入一个正整数n(n<10000000),表示整个行程的公里数。 当n=0时,输入结束。 对于每组输入,输出最小花费。如果需要的话,保留一位小数。

思路:做此类思维题目不能一直思考,要动手去写。

代码语言:javascript
复制
1.if(n<=4) //此时说明就是起步价10.
2.if(n>4 && n<=8) //起步价10 + (n-4)*2;
在往后我们需要思考了,如果我们不下车一直是2.4/公里
从一开始坐车8公里需要:10 + 4*2 = 18;
而不下车继续坐车为:2.4 * 8 = 19.2;
那么如果我们需要继续坐车的路程是>=8的话,我们就换乘。
那么情况3就出来了
3.while(n>=8){
sum += 18;
n -= 8;
}
那么减完后可能是<=4
               >4 && <8
如果是<=4的话,说明最后一趟车我们不换乘,一公里2.4元(换乘就变成起步价一公里2.5元,并且必须得付10块了)
如果是 >4 && <8 的话,我们令 10 + (n-4)*2  >= 2.4*n
                                 那么 n<=5
所以当 n > 4 && n <= 5的时候,不换乘继续坐
n>5 && n<8的时候,换乘。 


整理一下就是:
if(n<=4)  10
if(n>4&&n<=8) 10 + (n-4)*2
if(n>8){
       1.循环-8 sum += 18,n-=8
       if(n<=5) sum += n*2.4 
       if(n<8) sum += 10 + (n-4)*2
}

代码如下:

代码语言:javascript
复制
#include<bits/stdc++.h>

using namespace std;
//


int main(){
	int n;
	while(cin>>n&&n){
		double sum=0.0;
		if(n<=4){
		  cout<<"10"<<endl;
		  continue;	
		} 
		if(n>4 && n<=8){
		  cout<<10+(n-4)*2<<endl;
		  continue;	
		} 
		//八公里18>若继续坐8*2.4=19.2 
		//else if(n>8 && n<=12) cout<<18+2.4*(n-8)<<endl;
		while(n>=8){
			sum += 18;
			n-=8;
		}
		if(n<=5){
			sum += n*2.4;
		}
		else if(n<8){
			sum += 10 + (n-4)*2;
		}
		if(sum == (int)sum) printf("%d\n",(int)sum);
		else printf("%.1lf\n",sum);
		
	}
	return 0;
} 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-06-28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档