虚拟汽车加油问题C语言——For初学者

虚拟汽车加油问题–C语言

问题描述:
一辆虚拟汽车加满油后可行驶 n km。旅途中有若干加油站。设计一个有效算法,指出应该在那些加油站停靠加油,使沿途加油次数最少。并证明算法能产生一个最优解。
算法设计:
对于给定的nk个加油站位置,计算最少次数。
数据输入:
第一行有两个整数nk,表示汽车加满油后可行驶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));//动态申请一维数组
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值