3.你有三个碗:分别是7,4,3升容量。只有7升那个是满的。用最少次数倒出分别是2,2,和3升水。

问:你有三个碗:分别是7,4,3升容量。只有7升那个是满的。用最少次数倒出分别是2,2,和3升水。

每组数里的每个数字代表每个碗里水的升数:

700-340-313-610-601-241-223(倒6次水)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个问题可以使用贪心算法来解决。具体算法如下: 1. 首先将起点作为当前位置,将油箱加。 2. 在沿途的加油站中找到第一个比当前位置更远的加油站,将油箱加,并前往该加油站。 3. 在该加油站再次寻找下一个比当前位置更远的加油站,将油箱加,并前往该加油站。 4. 重复步骤3,直到到达终点或无法找到下一个加油站。 代码实现如下: ```c #include <stdio.h> int main() { int n, m, k; // n为加油站数量,m为油箱的容量,k为起点到终点的距离 scanf("%d%d%d", &n, &m, &k); int pos[n + 2]; // pos数组存储加油站的距离 for (int i = 1; i <= n; i++) { scanf("%d", &pos[i]); } pos[0] = 0; // 起点位置为0 pos[n + 1] = k; // 终点位置为k int cur_pos = 0; // 当前位置 int cur_gas = m; // 当前油量 int cnt = 0; // 记录加油次数 for (int i = 1; i <= n + 1; i++) { int d = pos[i] - pos[i - 1]; // 两个加油站之间的距离 if (d > cur_gas) { // 如果无法到达下一个加油站 cnt++; // 加油 cur_gas = m - d; // 油量减少 } else { // 可以到达下一个加油站 cur_gas -= d; // 油量减少 } } printf("%d", cnt); return 0; } ``` 输入格式为:第一行三个整数n、m、k,分别表示加油站数量、油箱容量、起点到终点的距离。接下来n行,每行一个整数,表示每个加油站距离起点的距离。输出格式为一个整数,表示最少的加油次数。 例如,对于样例输入: ``` 4 7 25 5 10 15 20 ``` 程序输出为: ``` 2 ``` 表示最少需要加油两次,分别在第一个加油站和第三个加油站。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值