生活中的数学问题(一)
2016-02-01 14:40
609 查看
题目一:每瓶啤酒A元,B个空酒瓶或C个瓶盖可换1瓶啤酒。X元最多可喝多少瓶啤酒?(不可以赊账)
分析: 一个小小的BUG
作者:小不懂
链接:http://www.zhihu.com/question/35726119/answer/69314430
来源:知乎
3瓶酒= 3个瓶子 +3个盖子换第一次2个瓶子 换了一瓶。还剩2个瓶子 4个盖子然后 2个瓶子 4个盖子 可以换三瓶啤酒。于是就循环了。得之。只有啤酒就换得完……这规则有BUG
所以我就不考虑可以赊账啊, 瓶盖换空瓶啊之类的
One).最简单的思路就是顺序处理,先买X/A瓶酒,最用酒瓶换,再来用瓶盖换.
衍生出来的价值三元方程式解法
设一瓶酒里的酒价值x,酒瓶价值y,瓶盖价值z,随手列个三元一次方程组解得
x+y+z=A: By=A; Cz=A;
解出x,y,z的值,那么问题的关键又到了最后一次还剩下多少瓶盖,瓶身
把剩下的总价值算出来, 求出和初态的差值,这个差值就是酒的价值(price),瓶数就是price/x(其实在简单地分析之后可以得出带2n(n>=1)钱时,最后总会剩下1个瓶身,3个瓶盖)
分析: 一个小小的BUG
作者:小不懂
链接:http://www.zhihu.com/question/35726119/answer/69314430
来源:知乎
3瓶酒= 3个瓶子 +3个盖子换第一次2个瓶子 换了一瓶。还剩2个瓶子 4个盖子然后 2个瓶子 4个盖子 可以换三瓶啤酒。于是就循环了。得之。只有啤酒就换得完……这规则有BUG
所以我就不考虑可以赊账啊, 瓶盖换空瓶啊之类的
One).最简单的思路就是顺序处理,先买X/A瓶酒,最用酒瓶换,再来用瓶盖换.
衍生出来的价值三元方程式解法
#include<iostream> using namespace std; class Peer { public: Peer(int peerPrice = 0, int peerNum = 0, int peerTop = 0, int peerBeerBottle = 0, int money = 0) :PeerPrice(peerPrice), PeerNum(peerNum), PeerTop(peerTop), PeerBeerBottle(peerBeerBottle), Money(money) {} static void setupone(int n, int m) { PeerTopToPeer=n, PeerBottleToPeer=m; } void Finally(int a, int e); private: int PeerPrice; int PeerNum; int PeerTop; int PeerBeerBottle; int Money; static int PeerTopToPeer, PeerBottleToPeer; }; int Peer::PeerBottleToPeer = 0; int Peer::PeerTopToPeer = 0; void Peer::Finally(int a, int e) { PeerPrice=a; Money=e; do { PeerNum += (Money / PeerPrice); PeerTop += (Money / PeerPrice); PeerBeerBottle += (Money / PeerPrice); Money = 0; while ((PeerBeerBottle / PeerBottleToPeer) != 0) { PeerTop += (PeerBeerBottle / PeerBottleToPeer); PeerNum += (PeerBeerBottle / PeerBottleToPeer); PeerBeerBottle = PeerBeerBottle - PeerBeerBottle / PeerBottleToPeer*PeerBottleToPeer + PeerBeerBottle / PeerBottleToPeer; } while ((PeerTop / PeerTopToPeer) != 0) { PeerBeerBottle += (PeerTop / PeerTopToPeer); PeerNum += (PeerTop / PeerTopToPeer); PeerTop = PeerTop - PeerTop / PeerTopToPeer*PeerTopToPeer + PeerTop / PeerTopToPeer; } } while ((PeerBeerBottle / PeerBottleToPeer) != 0 || (PeerTop / PeerTopToPeer) != 0); cout << "The number of Peer :" << PeerNum << endl; } int main() { Peer Q1; int n, m; cout << "Please enter your PeerBottleToPeer " ; cin >> m; cout << endl; cout << "Please enter your PeerTopToPeer " ; cin >> n; cout << endl; Q1.setupone(n, m); int a, b=0, c=0, d=0, e; cout << "Please enter your PeerPrice " ; cin >> a; cout << endl; cout << "Please enter your money " ; cin >> e; cout << endl; Q1.Finally(a,e); system("pause"); return 0; }
设一瓶酒里的酒价值x,酒瓶价值y,瓶盖价值z,随手列个三元一次方程组解得
x+y+z=A: By=A; Cz=A;
解出x,y,z的值,那么问题的关键又到了最后一次还剩下多少瓶盖,瓶身
把剩下的总价值算出来, 求出和初态的差值,这个差值就是酒的价值(price),瓶数就是price/x(其实在简单地分析之后可以得出带2n(n>=1)钱时,最后总会剩下1个瓶身,3个瓶盖)
—————————————————————————
相关文章推荐
- 如何组织构建多文件 C 语言程序(二)
- 如何写好 C main 函数
- 在语文湿地,潜伏着这样一个妈
- 用批处理解决数学问题的代码第1/4页
- 常用生活小窍门
- 生活小常识(非常实用)
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- C语言编程中统计输入的行数以及单词个数的方法
- C语言自动生成enum值和名字映射代码
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构