您的位置:首页 > 编程语言 > C语言/C++

生活中的数学问题(一)

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瓶酒,最用酒瓶换,再来用瓶盖换.

衍生出来的价值三元方程式解法

#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语言 数学 生活