只有三只酒杯,如何将酒平均分给4个人喝?

只有三只酒杯,如何将酒平均分给4个人喝?

问题:

有三个酒杯,其中两个大酒杯每个可以装8两酒,一个可以装3两酒。现在两个大酒杯都装满了酒,只用这三个杯子怎么把酒平均的分给4个人喝?

解答:

16 / 4 = 4,即每个人要喝4两酒。我们很容易用3两的杯子得到3两酒,难度在于怎么得到1两酒。我们怎么可以得到1两呢?

1 = 3*3 - 8

因此我们用3两的杯子量3次倒入8两的杯子中,剩下的就是1两。

因为我们要尽可能多的得到1两,用 1 = 3*3 - 8 这个方法,我么可以在总数为9两,10两和11两时3次量出1两酒。

所有我们的首要任务是得到11两,11 = 16 - 2 -3.所有先要量出 2 两和 3 两,其中2两可以如下得到:

2 = 8 - 3 -3

答案:

设4个人分别为A, B, C, D:

8 8 0

8 5 3        ==>        A喝3两: 3 0 0 0

8 5 0

8 2 3        ==>        B喝2两: 3 2 0 0

8 0 3

8 3 0

5 3 3

5 6 0

2 6 3

2 8 1        ==>        C喝1两: 3 2 1 0

2 8 0

0 8 2

0 7 3

3 7 0

3 4 3

6 4 0

6 1 3        ==>        D喝1两: 3 2 1 1

6 0 3

8 0 1        ==>        A喝1两: 4 2 1 1

8 0 0

5 0 3        ==>        C喝3两: 4 2 4 1

5 0 0

2 0 3        ==>        D喝3两: 4 2 4 4

2 0 0        ==>        B喝2两: 4 4 4 4

0 0 0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用一个大小为52的数组来表示一副扑克牌,然后使用随机数来模拟洗牌,最后将牌依次发给4个人并对每个人的牌进行排序即可。具体实现可以参考以下代码: ```java import java.util.*; public class DealAndSortCards { public static void main(String[] args) { String[] suits = {"♠", "♥", "♦", "♣"}; String[] ranks = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"}; String[] cards = new String[52]; for (int i = 0; i < 52; i++) { cards[i] = ranks[i % 13] + suits[i / 13]; } Random rnd = new Random(); for (int i = 51; i > 0; i--) { int j = rnd.nextInt(i + 1); String temp = cards[i]; cards[i] = cards[j]; cards[j] = temp; } String[] players = new String[4]; players[0] = "Player 1: "; players[1] = "Player 2: "; players[2] = "Player 3: "; players[3] = "Player 4: "; int playerIndex = 0; for (int i = 0; i < 52; i++) { players[playerIndex] += cards[i] + " "; playerIndex = (playerIndex + 1) % 4; } for (int i = 0; i < 4; i++) { String[] playerCards = players[i].split(" "); Arrays.sort(playerCards); players[i] = String.join(" ", playerCards); System.out.println(players[i]); } } } ``` 代码中使用了两个数组来分别表示扑克牌的花色和点数,然后使用一个大小为52的数组来表示一副完整的扑克牌。通过一个随机数生成器来模拟洗牌过程,最后将牌依次发给4个人并对每个人的牌进行排序。可以使用 `split` 方法将每个人手中的牌分割成数组,然后使用 `Arrays.sort` 方法对数组进行排序,最后将排序后的牌重新组合成字符串输出即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值