用C语言或者Java写出代码 题目描述 一辆汽车加满油后可以行驶n千米。旅途中有k个加油站。若要使沿途的加油次数最少,请设计一个有效的算法。 输入 第一行有2个正整数n和k,表示汽车加满油后可行驶nkm,且旅途中有k个加油站。接下来1行中,有k+1个整数,表示第k个加油站与第k-1个加油站之间的距离。第0个加油站表示出发地,汽车已加满油,且在第0个加油站满油不算加油,第k+1个加油站表示目的地。(请处理到文件尾) 输出 最少加油次数。如果无法到达目的地,则输出“No Solution”。 样例输入 Copy 7 7 1 2 3 4 5 1 6 6 样例输出 Copy 4
时间: 2023-07-15 15:12:22 浏览: 171
C语言代码如下:
```c
#include <stdio.h>
#define MAX_N 100005
int d[MAX_N];
int main() {
int n, k, i, ans = 0, now = 0, last = 0;
scanf("%d%d", &n, &k);
for (i = 1; i <= k + 1; ++i) {
scanf("%d", &d[i]);
}
for (i = 1; i <= k + 1; ++i) {
if (d[i] - d[last] > n) { // 当前加油站与上一个加油站之间的距离超过了汽车的行驶距离n,无法到达
printf("No Solution");
return 0;
}
if (d[i] - d[now] > n) { // 当前加油站与当前油量下能到达的最远距离之间的距离超过了汽车的行驶距离n,需要加油
now = i - 1;
++ans;
}
}
printf("%d", ans);
return 0;
}
```
Java代码如下:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
int[] d = new int[k + 2];
for (int i = 1; i <= k + 1; ++i) {
d[i] = sc.nextInt();
}
int ans = 0, now = 0, last = 0;
for (int i = 1; i <= k + 1; ++i) {
if (d[i] - d[last] > n) { // 当前加油站与上一个加油站之间的距离超过了汽车的行驶距离n,无法到达
System.out.println("No Solution");
return;
}
if (d[i] - d[now] > n) { // 当前加油站与当前油量下能到达的最远距离之间的距离超过了汽车的行驶距离n,需要加油
now = i - 1;
++ans;
}
}
System.out.println(ans);
}
}
```
阅读全文