虚拟汽车加油问题–C语言
问题描述:
一辆虚拟汽车加满油后可行驶 n km。旅途中有若干加油站。设计一个有效算法,指出应该在那些加油站停靠加油,使沿途加油次数最少。并证明算法能产生一个最优解。
算法设计:
对于给定的n和k个加油站位置,计算最少次数。
数据输入:
第一行有两个整数n和k,表示汽车加满油后可行驶n km,且旅途中有k个加油站。接下来的1行有k+1个整数,表示第k个加油站与第k-1个加油站的之间的距离。第0个加油站表示出发地,汽车已加满油。第k+1个加油站表示目的地。
输入示例:
7 7
1 2 3 4 5 1 6 6
输出示例:
4
解题思路:
首先是判断每两个加油站之间的距离是不是满足小于等于n,如果两站的距离大于一次加满油行驶的距离的话肯定是没有解的。
那么,排除这种情况,此题就有最优解,用贪心算法来实现最优值的构造。我们要求尽可能多的多走几个加油站,这样从出发到终点站我们有最少的停车次数。
根据上面的输入我们有这样一组解:
由上面的图容易知道有四次加油,而且这就是最优值,解题就是每一次贪尽可能多的距离。
代码如下:
#include<stdio.h>
#include<stdlib.h>
void main (void)
{
int *a,n,k;
scanf("%d%d",&n,&k);//输入n和k
a = (int *)malloc(sizeof(int)*(k+2));//动态申请一维数组