首页 > 试题广场 >

喝可乐

[编程题]喝可乐
  • 热度指数:856 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
口渴可乐公司近期推出了两种相同价格的新口味可乐,分别是香甜的蜂蜜可乐与温暖的生姜可乐!为了回馈一直以来爱好可乐的广大群众,在新产品上市的一个月内各家超商都有下列的优惠活动!

• 收集  个蜂蜜可乐的空瓶子可兑换一瓶全新的生姜可乐 

• 收集  个生姜可乐的空瓶子可兑换一瓶全新的蜂蜜可乐

可鲁非常地喜欢喝可乐,但他身上的钱只能买  瓶可乐。因此,他希望可以利用优惠活动来让自己喝到尽量多瓶的可乐。你能帮帮他吗?


输入描述:
输入的第一行有一个正整数 ,代表测试资料的组数。
每一组测试资料有三个正整数  和 ,各一个空白隔开。


输出描述:
每组测试数据输出一行,表示最多喝到的可乐瓶数
示例1

输入

3
10 5 5
11 3 5
20 50 60

输出

12
15
20
#include<iostream>
using namespace std;
void coke();
int main(){
   int T;
   cin>>T;
   for(int i=0;i<T;i++){
        coke();
    } 
}
void coke(){
        int n,a,b;
        cin>>n>>a>>b;
        int mx=0;
        for(int i=0;i<=n;i++){
            int cn=0;
            int feng=i;
            int jiang=n-i;
            while(jiang>=b||feng>=a){
                if(feng>=a&&(jiang<b||a<=b)){
                    int temp=feng/a;
                    feng%=a;
                    jiang+=temp;
                    cn+=temp;
                }
                else{
                    int temp=jiang/b;
                    jiang%=b;
                    feng+=temp;
                    cn+=temp;
                }
                
            }
            mx=max(mx,cn);
        }
        cout<<n+mx<<endl;
}

发表于 2026-03-29 12:50:27 回复(0)
#include <stdio.h>
int pingshu(int x, int y, int a, int b) {
    int total = x + y;
    int h = x, g = y;

    while (h >= a || g >= b) {
        int h_mod = h % a;
        int h_div = h / a;
        int g_mod = g % b;
        int g_div = g / b;

        total += h_div + g_div;
        h = h_mod + g_div;
        g = g_mod + h_div;
    }
    return total;
}
int findmax(int arr[], int len) {
    int max = arr[0];
    for (int i = 1; i < len; i++) {
        if (arr[i] > max)
            max = arr[i];
    }
    return max;
}

int main() {
    int T;
    scanf("%d", &T);
    while (T--) {
        int n, a, b;
        scanf("%d %d %d", &n, &a, &b);

        int arr[10005] = {0};
        for (int j = 0; j <= n; j++) {
            arr[j] = pingshu(j, n - j, a, b);
        }

        int ans = findmax(arr, n + 1);
        printf("%d\n", ans);
    }
    return 0;
}
发表于 今天 00:32:30 回复(0)