- 【汽车加油问题】一辆汽车加满油后可以行驶n千米。旅途中有k个加油站。若要使沿途的加油次数最少,设计一个有效的算法,指出应在那些加油站停靠加油。
- 数据输入:由文件input.txt 给出输入数据。第一行有2个正整数n和k,表示汽车加满油后可行驶nkm,且旅途中有k个加油站。接下来1行中,有k+1个整数,表示第k个加油站与第k-1个加油站之间的距离。第0个加油站表示出发地,汽车已加满油。第k+1个加油站表示目的地。
- 结果输出:将编程计算出的最少加油次数输出到文件ouput.txt。如果无法到达目的地,则输出“No Solution”。
- 输入文件示例 输出文件示例
- Input.txt output.txt
- 77 4
- 12 3 4 5 1 6 6
- 要求:
- 采用贪心算法,编程计算并输出最少加油次数,以及指出应在那些加油站停靠加油。
#include<stdio.h> int main() { FILE *fp;//文件指针 int a[100],b[100]; int i,n,k,flag,sum,count,temp; fp=fopen("input.txt","r"); if(fp==NULL) { printf("无法打开文件!\n"); exit(0); } flag=0; i=0; temp=1; while(!feof(fp)) { if(flag==0) fscanf(fp,"%d%d",&n,&k);//从文件中读取n,k flag=1; if(flag!=0) { fscanf(fp,"%d",&a[i++]);//从文件中读取加油站之间的距离 if(a[i]>n)//如果两站距离大于n,则说明无法到达目的地 temp=0; } } fclose(fp); if(temp==0) { fp=fopen("output.txt","w"); fprintf(fp,"No Solution"); fclose(fp); return 0; } count=0; sum=0; for(i=0; i<k+1; i++) { sum+=a[i]; if(sum>n) { i--; b[count++]=i+1; sum=0; } } fp=fopen("output.txt","w"); fprintf(fp,"%d",count);//把数据写到文件中去 fclose(fp); return 0; }
贪心算法之加油问题
原文作者:贪心算法
原文地址: https://blog.csdn.net/qq_31028891/article/details/52956251
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/qq_31028891/article/details/52956251
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。