汽车加油问题(C语言实现)

C语言汽车加油问题

C语言汽车加油问题(贪心算法,贪心策略)
问题描述:
一辆汽车加满油后可行驶n公里。旅途中有K个加油站。设计一个有效算法,在哪些加油站停靠加油,使沿途加油次数最少。
输入的第1行有2个整数n k,表示汽车加满油可行驶 n 公里,图中有k 个加油站。第二行有k+1个整数,表示第k个加油站与第k-1个加油站的距离。第0个为出发地,汽车已加满油。第k+1个为目的地。 若无法到达,输出”No Solution”.
例如: 输入: 7 7
1 2 3 4 5 1 6 6
输出: 4
实验要求
对于给定的n(n <= 5000)和k(k <= 1000)个加油站位置,编程计算最少加油次数。

解题思路
结合题中给出的测试数据来说,
首先是车可以走 7 公里, 当车从出发点到下一站点是走了 1 公里,所以暂时还剩下 6 公里的油量,此时的油量和到下一站的距离比较,发现剩余油量 6 大于到下一站的距离 2 ,所以不加油,继续行驶。经过这个站之后还剩下 4 公里的油量,经过比较考虑是否需要加油,以此类推。

用到的贪心策略就是不到走不完下一站的情况下不加油

下面是AC代码

#include <stdio.h>
int main()
{
	int n, k, i, flag=0;
	scanf("%d %d",&n, &k);
	getchar();//吸收多余的空格键,防止出现意外
	int post[1000];
	// input orgian data
	for(i=0; i<k+1; ++i)
		scanf("%d",&post[i]);
	int oil_box = n; //full the box at first
	int count=0; //record the full_oil times
	//progress data
	for (i = 0; i < k+1; ++i){
		if(oil_box >= post[i]){
			oil_box-=post[i];
			continue;
		}
		else{
			i-=1;
			count++;flag++;
			oil_box = n;
		}
	}
	if (flag == 0)
		printf("No solution\n");
	else
		printf("%d\t",count);//show results;
	return 0;
}
发布了22 篇原创文章 · 获赞 39 · 访问量 4042

猜你喜欢

转载自blog.csdn.net/weixin_44895666/article/details/102525744