一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。
输入:第1行两个正整数n和k,表示汽车加满油后可行驶n 公里,且旅途中有k个加油站。
第2行有k+1个整数,表示第k个加油站与第k-1个加油站之间的距离。第0个加油站表示出发地,汽车已加满油,第k+1个加油站表示目的地。
输出:最少加油次数。如果无法到达目的地,则输出“No Solution”。
代码:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
//汽车加油问题:一辆汽车加满油后可行驶n公里。
//旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。
//输入:第1行两个正整数n和k,表示汽车加满油后可行驶n 公里,且旅途中有k个加油站。
//第2行有k+1个整数,表示第k个加油站与第k-1个加油站之间的距离。
//第0个加油站表示出发地,汽车已加满油,第k+1个加油站表示目的地。
//输出:最少加油次数。如果无法到达目的地,则输出“No Solution”。
int main(){
int n,k,i;
printf("请输入汽车加满油后可行驶公里数,且旅途中有加油站个数:\n");
scanf("%d",&n);
scanf("%d",&k);
int jvli;//到下一个加油站的距离
int you=n;//剩余油能跑的距离
int jia[k],top=0;//在哪个加油站加油以及加加油数目
for(i=0;i<=k;i++)
{
scanf("%d",&jvli); //随输随处理
if(you<jvli) //剩下的油跑不到了
{
if(jvli>n)//加满油也跑不到
{
printf("No Solution"); //没救了
return 0;
}
jia[top++]=i; //在i站加油
you=n; //油加满
}
you-=jvli; //开车跑路
}
if(top==0)
printf("不需要加油。");
else
{
printf("需要在%d站加油,分别是:",top);
for(i=0;i<top;i++)
{
printf(" %d ",jia[i]);
}
}
return 0;
}
样例输入:
7 7
1 2 3 4 5 1 6 6
运行截图