23.11.14
题目:

解题思路1:
赊账前提:
易知,对于赊的可乐数与手中空瓶数,以及瓶盖数要有如下关系:
**若赊账x瓶;
(手中空瓶数+x(空瓶数))/2 + (手中瓶盖数+x(瓶盖数))/4 >= x
也就是说,必须做到赊账后能还给老板。**
数据分析:
对于空瓶数:取0或者1
对于瓶盖数:取0,1,2,3
这时才满足借的条件,也就是自身不能在和老板换取了,只有通过赊账才有可能继续下去
列出下面表格:
| 空瓶数 | 瓶盖数 | 赊账数(瓶) |
|0|0|无论借几瓶都无解|
|0|1|无论借几瓶都无解|
|0|2|要一次性借2瓶|
|0|3|借一瓶|
|1|0|借一瓶|
|1|1|借一瓶|
|1|2|借一瓶|
|1|3|借一瓶|
解题思路2:
当然这是一个数学题,可以用数学的思维去解答:
假设1瓶可乐1元钱,喝完瓶子当0.5元用,瓶盖可以当0.25元用,相当于你只花了0.25元喝一瓶可乐,换句话说就是1瓶可乐的钱可以喝4瓶,输入可乐的数量,直接输出4的倍数就行了
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| #include<iostream> using namespace std; int sum; int n; int m; int s = 0; void aaaa(int &n,int &m,int &sum){ if(n<2&&m<4){
if((n+1)/2+(m+1)/4>=s+1){ s++; n++; m++; sum++; cout<<"n:"<<n<<endl; cout<<"m:"<<m<<endl; cout<<"sum:"<<sum<<endl; cout<<"s:"<<s<<endl; aaaa(n,m,sum); }else if((n+2)/2+(m+2)/4>=s+2){ s=s+2; n=n+2; m=m+2; sum=sum+2; cout<<"n:"<<n<<endl; cout<<"m:"<<m<<endl; cout<<"sum:"<<sum<<endl; cout<<"s:"<<s<<endl; aaaa(n,m,sum); }else{ return ; }
}else{ int x = n/2; n=n%2; int y = m/4; m=m%4; sum = sum+ x + y-s; if(x>=s){ x=x-s; }else{ y=y-s; } n=n+x+y; m=m+x+y; s=0; aaaa(n,m,sum); } } int main(){ cout<<"输入已有可乐数:"<<endl; cin>>sum; n=sum; m=sum; aaaa(n,m,sum); cout<<n<<endl; cout<<m<<endl; cout<<sum<<endl; return 0; }
|
运行结果:
