递归的应用.doc_第1页
递归的应用.doc_第2页
递归的应用.doc_第3页
递归的应用.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

文档来源:冰凝呈夏的博客 / 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离D1、汽车油箱的容量C(以升为单位)、每升汽油能行驶的距离D2、出发点每升汽油价格P和沿途油站数N(N可以为零),油站i离出发点的距离Di、每升汽油价格Pi(i=1,2,N)。计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出“No Solution”。Sample Input 275.6 11.9 27.4 2.8 2102.0 2.9220.0 2.2Sample Output26.95思路分析: 本题中主要思想的是递归,我的思路是把原点和终点都当成一个站。 判断如果加满油能走几个站,并获取到几个站中的最低价格的站。而真正加油时还要判断加的量是要刚好到站还是加满,因为如果最低价站的价格要比上个加油点的价格高,就在上个站加满油;如果比上个加油点的价格低,那么加油的量能刚好到站就行。程序代码:#include #include #include /用于取小数点后有效两位using namespace std;#define TRUE 1#define FALSE 0struct Pointfloat dis;float pri;int pot;float cango;Point need_judge;float sdis = 0, bot =0, use =0, pri =0;float sum_money=0,oil =0;int canarrive = 1;float check(Point * state,int n,int start_satae);bool IsMin(Point * state,int n,int start_state);void GetMinPrice(Point * state,int n,int start_state);int main()ifstream fin;ofstream fout;int i,n;Point *state;fin.open(2.in);fout.open(2.out);finsdisbotuseprin;cango = bot*use;state = new Pointn+1;state0.dis = 0;state0.pri = pri;state0.pot = 0;for(i = 1;istatei.disstatei.pri;statei.pot = i;staten+1.dis = sdis;staten+1.pri = 0;staten+1.pot = n+1;check(state,n+1,0);if(canarrive)coutsetiosflags(ios:fixed);cout.precision(2);coutsum_moneyendl;elsecoutNo Solution!endl;return 0;float check(Point * state,int n,int start_state)float oil_use;/-获取价格最低的站need_judge = statestart_state+1;GetMinPrice( state,n,start_state);/-/计算到下个需要加油的站的总金额/能走到终点并且是几个站中价格最低的站if( staten.dis -statestart_state.dis cango & IsMin(state,n,start_state) ) if(oil=0)return sum_money += statestart_state.pri * ( (staten.dis -statestart_state.dis )/use);/走不到终点 或者 不是几个站中价格最低的站else if(need_judge.pri statestart_state.pri )sum_money += statestart_state.pri* ( need_judge.dis -statestart_state.dis )/use);oil += ( need_judge.dis -statestart_state.dis )/use-oil);elsesum_money =sum_money + statestart_state.pri* (bot-oil);oil = bot;/到达需加油站的剩余油量oil_use =(need_judge.dis -statestart_state.dis )/use;oil -= oil_use;start_state = need_judge.pot;return check(state, n, start_state);/寻找能走到的加油站中最低价void GetMinPrice(Point * state,int n,int start_state)int sta_n,i,j;for(i=start_state;i=n;i+) /寻找到能走到的站点范围if(i cango)canarrive =0;break;elseif(i statei.dis-statestart_state.dis)sta_n = i; /寻找能走到的加油站中最小值。for(j=start_state;j=sta_n;j+)if(j+1= statej+1.pri & statej+1.pri !=0)need_judge =statej+1;/判断是否为离终点的最低价bool IsMin(Point * state,int n,int start_state)int i,t=1;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论