题意:汽水瓶有三个部分cap+plastic bottle+ label(瓶盖-瓶身-瓶底),给出数据:n为原瓶数,x,y,z为这三个部分可以用相应的数字换取新瓶子,求最大总瓶数。
模拟(暴力)
1 //汽水瓶有三个部分-cap+plastic bottle+ label 2 //n为原瓶数 3 //x,y,z为这三个部分可以用相应的数字换取新瓶子,求最大总瓶数 4 #include5 #include 6 #include 7 #include 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 }