概要
迭代法也称“辗转法”,是一种不断用变量的旧值递推出新值的解决问题的方法。迭代包括:递推算法和倒退算法。
递推法
简单的例子有累加和累乘
倒推法
例1:穿越沙漠问题
问题描述:
一辆吉普车穿越1000km的沙漠。吉普车的总装有油量为500加仑,耗油量为一加仑/km。由于沙漠中没有油库,必须先用这辆车在沙漠中建立临时油库。若吉普车用最少的耗油量穿越沙漠,应在哪些地方建立油库,以及各处储存的油量
数学模型:
第一段长度为500km且第一个加油点储油量为500;
第二段的中为了储存油,吉普车必须有往返。
①应走奇数段,保证最后向终点走。
②每次向终点的行进时吉普车都是满载的
③这个加油站点要储存下一个站点的储油量以及建立下一个加油点路上的油耗
以此类推。。。
实现代码:
#include <iostream>
using namespace std;
//思路为从终点到起点
int main(){
int dist1,dist2=0,oil,sum=0,k=1,count=0;//dist1为总路程,dist2为车已走路程,oil是汽车最大载油量,耗油量为一加仑/km,
//k控制每个间隔车往返的次数 ,sum为总油量,count记录的是加油站的个数
cin>>dist1>>oil;
while(dist2<dist1){
dist2+=(oil/k);
if(dist1-dist2>0)
cout<<"在离起点距离为"<<dist1-dist2<<"km的地方建立油库,该油库存油量为"<<oil*(count+1)<<endl;
else
cout<<"在起点建立油库,该油库存油量为"<<oil*(count+1)<<endl;
k+=2;
count++;
}
cout<<"一共建立了"<<count<<"个加油站";
}