ACM/ICPC 之 模拟 (HNUOJ 13391-换瓶模拟)

本文介绍了一种基于汽水瓶三个组成部分的换瓶算法,通过模拟过程,计算出给定初始瓶数和各部分换瓶比例下,能够获得的最大总瓶数。通过排序和循环迭代的方式,有效地解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  题意:汽水瓶有三个部分cap+plastic bottle+ label(瓶盖-瓶身-瓶底),给出数据:n为原瓶数,x,y,z为这三个部分可以用相应的数字换取新瓶子,求最大总瓶数。

  模拟(暴力)

  

 1 //汽水瓶有三个部分-cap+plastic bottle+ label
 2 //n为原瓶数
 3 //x,y,z为这三个部分可以用相应的数字换取新瓶子,求最大总瓶数
 4 #include<iostream>
 5 #include<cstring>
 6 #include<cstdio>
 7 #include<algorithm>
 8 using namespace std;
 9 
10 int t[3];    //当前三部分数量(按换瓶基数-调整顺序)
11 int c[3];    //三部分换瓶基数
12 
13 int main()
14 {
15     int T,n;
16     scanf("%d",&T);
17 
18     while(T--)
19     {
20         int b = 0;
21         scanf("%d%d%d%d",&n,&c[0],&c[1],&c[2]);
22         b = t[0] = t[1] = t[2] = n;
23 
24         sort(c,c+3);    //排序(偷懒啦= =)
25 
26         int res;    //可换瓶数量
27         while(t[0]/c[0] || t[1]/c[1] || t[2]/c[2])
28         {
29             if(t[0]/c[0])
30             {
31                 b += res = t[0]/c[0];
32                 t[0] = t[0]%c[0]+res;
33                 t[1] += res;
34                 t[2] += res;
35             }
36             if(t[1]/c[1])
37             {
38                 b += res = t[1]/c[1];
39                 t[1] = t[1]%c[1]+res;
40                 t[2] += res;
41                 t[0] += res;                
42             }
43             if(t[2]/c[2])
44             {
45                 b += res = t[2]/c[2];
46                 t[2] = t[2]%c[2]+res;
47                 t[1] += res;
48                 t[0] += res;
49             }
50         }
51         printf("%d\n",b);
52     }
53 
54     return 0;
55 }

 

转载于:https://www.cnblogs.com/Inkblots/p/4729482.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值