运动员喝饮料问题

题目:

27个小运动员在参加完比赛后,口渴难耐,去小店买饮料,饮料店搞促销,
凭三个空瓶可以再换一瓶,他们最少买多少瓶饮料才能保证一人一瓶?
要求: 尝试优化算法,代码行数越少越好

 

def f(a):
    for i in range(a+1):
        all_=0 #能得到的总数
        new=0  #空瓶子的数量
        b=i #传值参数
        n=i #传值参数
        while int(n/3)!=0:
            new=int(n%3+n/3)
            all_=int(all_+i+new-n%3)
            n=new
            i=0
        if new==2:  #如果剩下的空瓶子数为2则可以借一瓶然后3换1
            all_+=1
        if all_>=a or (a<4 and a==b):
            return b
    # buy=0
    # all=0
    # while all<27:
    #     buy+=1
    #     all+=1
    #     if all%3==0:
    #         all+=1
    # if all%3==1:
    #     buy-=1
    # return buy
while True:
    a=int(input('>>>'))
    print(f(a))

 

转载于:https://www.cnblogs.com/alecc1124/p/11508246.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
调制饮料背包问题是一个经典的动态规划问题,可以用C语言来解决。该问题的目标是在给定的一组饮料和对应的体积、价格以及背包容量的情况下,选择合适的饮料放入背包中,使得背包中的饮料总价格最大化。 以下是解决调制饮料背包问题的一种C语言实现思路: 1. 定义一个二维数组dp,其中dp[i][j]表示在前i个饮料中,背包容量为j时的最大价格。 2. 初始化dp数组,将所有元素初始化为0。 3. 使用两层循环遍历所有的饮料和背包容量: - 对于第i个饮料,如果其体积小于等于当前背包容量j,则可以选择将其放入背包中,此时背包中的饮料总价格为dp[i-1][j-v[i]] + p[i],其中v[i]表示第i个饮料的体积,p[i]表示第i个饮料的价格。 - 如果不选择将第i个饮料放入背包中,则背包中的饮料总价格为dp[i-1][j]。 - 取上述两种情况中的较大值作为dp[i][j]的值。 4. 最终,dp[n][m]即为所求的最大价格,其中n表示饮料的数量,m表示背包的容量。 下面是一个简单的C语言代码示例: ```c #include <stdio.h> int max(int a, int b) { return (a > b) ? a : b; } int knapsack(int n, int m, int v[], int p[]) { int dp[n+1][m+1]; for (int i = 0; i <= n; i++) { for (int j = 0; j <= m; j++) { if (i == 0 || j == 0) dp[i][j] = 0; else if (v[i-1] <= j) dp[i][j] = max(dp[i-1][j], dp[i-1][j-v[i-1]] + p[i-1]); else dp[i][j] = dp[i-1][j]; } } return dp[n][m]; } int main() { int n = 3; // 饮料的数量 int m = 5; // 背包的容量 int v[] = {2, 3, 4}; // 饮料的体积 int p[] = {3, 4, 5}; // 饮料的价格 int maxPrice = knapsack(n, m, v, p); printf("背包中饮料的最大价格为:%d\n", maxPrice); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值