101 lines
3.0 KiB
C
101 lines
3.0 KiB
C
/*----------------------------------------------------------------------
|
||
【程序设计】
|
||
------------------------------------------------------------------------
|
||
现在有一位赛车手要驾驶一台电动摩托车去完成多段赛程。这台电动摩托车的电
|
||
池电量存储
|
||
上限是 100 度电哦,它有一个标称的平均电耗,也就是每行驶 100 公里,就会消
|
||
耗 10 度
|
||
电。这里有个很重要的前提条件要大家牢记呀,每一段赛程的距离都是小于 600
|
||
公里的哦,
|
||
并且每次出发的时候,电动摩托车的电池都是充满电的状态呢。还有一个关键的规
|
||
则得注意
|
||
哦,如果电动摩托车到达某个地点之后,赛车手查看发现电池内剩余的电量低于电
|
||
池总电量
|
||
的 10%(也就是 100×10% = 10 度电或者更少啦),那这个时候就必须得在这个
|
||
地方给电
|
||
动摩托车充电了呢,请帮忙计算一下,这名驾驶员在赛程中的哪几段赛程前是需要
|
||
充电的。
|
||
示例1:
|
||
【请输入赛程段数:】
|
||
5
|
||
【请输入各段赛程距离,单位公里:】
|
||
380 200 390 400 300
|
||
【需要在以下几段赛程前充电:】
|
||
第 3 段赛程前
|
||
第 5 段赛程前
|
||
示例2:
|
||
【请输入赛程段数:】
|
||
4
|
||
【请输入各段赛程距离,单位公里:】
|
||
190 140 110 80
|
||
无需充电。
|
||
------------------------------------------------------------------------
|
||
注意:部分源程序给出如下。请勿改动主函数 main 或其它函数中给出的内容,仅
|
||
在
|
||
Program-End 之间填入若干语句。
|
||
不要删除标志否则不得分。
|
||
不要修改或删除Program-End 之外的内容否则不得分。
|
||
----------------------------------------------------------------------*/
|
||
#include <stdio.h>
|
||
#include <stdlib.h> // 引入stdlib.h 用于动态内存分配相关操作
|
||
#define TANK_CAPACITY 100 // 电池总容量(单位:度)
|
||
#define LOW_FUEL_LIMIT (0.10 * TANK_CAPACITY) // 低电量阈值(10%)
|
||
#define AVG_CONSUMPTION_PER_100KM 10 // 平均电耗(单位:度/百公里)
|
||
#define FUEL_CONSUMPTION_PER_KM (AVG_CONSUMPTION_PER_100KM / 100.0) // 每公里电耗(单位:度/公里)
|
||
int checkRefuelStops(int trips[], int count, int results[])
|
||
{
|
||
int refuel_count = 0;
|
||
double current_fuel = TANK_CAPACITY;
|
||
/**********Program**********/
|
||
int i;
|
||
for(i=0;i<count;i++){
|
||
current_fuel = current_fuel-FUEL_CONSUMPTION_PER_KM*trips[i];
|
||
if(current_fuel<=LOW_FUEL_LIMIT){
|
||
results[refuel_count++]=i+1;
|
||
current_fuel=TANK_CAPACITY - FUEL_CONSUMPTION_PER_KM*trips[i];
|
||
}
|
||
}
|
||
/********** End **********/
|
||
return refuel_count;
|
||
}
|
||
int main()
|
||
{
|
||
int num_trips;
|
||
printf("【请输入赛程段数:】\n");
|
||
scanf("%d", &num_trips);
|
||
int *trips = (int *)malloc(num_trips * sizeof(int));
|
||
if (trips == NULL)
|
||
{
|
||
printf("内存分配失败!\n");
|
||
return 1;
|
||
}
|
||
printf("【请输入各段赛程距离,单位公里:】\n");
|
||
for (int i = 0; i < num_trips; ++i)
|
||
{
|
||
scanf("%d", &trips[i]);
|
||
}
|
||
int *results = (int *)malloc(num_trips * sizeof(int));
|
||
if (results == NULL)
|
||
{
|
||
printf("内存分配失败!\n");
|
||
free(trips);
|
||
return 1;
|
||
}
|
||
int refuel_count = checkRefuelStops(trips, num_trips, results);
|
||
if (refuel_count > 0)
|
||
{
|
||
printf("【需要在以下几段赛程前充电:】\n");
|
||
for (int i = 0; i < refuel_count; i++)
|
||
{
|
||
printf("第 %d 段赛程前\n", results[i]);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
printf("无需充电。\n");
|
||
}
|
||
free(trips);
|
||
free(results);
|
||
return 0;
|
||
}
|