【问题标题】:buying and selling mini-simulator买卖迷你模拟器
【发布时间】:2015-06-07 19:26:38
【问题描述】:
void test(){
    double money = 10000;
    double price = 0;
    int supply = 101;
    price = static_cast<double>(100) / supply;
    //buying
    for (int i = 0; i < 100; i++)
    {
        price = static_cast<double>(100) / supply;
        money -= price;
        supply--;
    }
    //selling
    for (int i = 0; i < 100; i++)
    {
        price = static_cast<double>(100) / supply;
        money += price;
        supply++;
    }
    cout << money << endl;
}

上面的代码根据产品的可用性计算产品的价格,然后它“购买”,减少商品的供应和客户的钱,一次其中一个,同时重新计算商品的价格每次购买。当客户决定出售产品时,也会发生类似的过程。这里的错误是输出:money 变量的最后一个值是 10099,而不是预期的 10000。您将如何解决这个问题?

【问题讨论】:

  • 你为什么用static_cast&lt;double&gt;(100)而不是简单的100.0?
  • 我认为您必须将supply++ 放在第二个循环的顶部
  • 为了清楚起见,这只是我的风格。
  • 是的,它确实有效,但为什么有效?
  • 通过纸上的计算。不是让别人免费为我做这件事..

标签: c++ math simulation


【解决方案1】:

问题在于,当最后一件物品被购买时,它是以适合N 供应的价格购买的。然后供应减少到N - 1。然后以适合N - 1 供应的价格出售第一个要出售的物品。重复这个问题 100 次,这就解释了你的不同之处。

如果您希望以与购买时相同的价格出售商品,则应在销售循环中的价格计算之前增加 supply

【讨论】:

  • 几乎是一个很好的解释。他最终有 99 个,而不是 100 个。所以这解释了差异 -1 ;)
  • 从问题看来,他想要重新计算价格(“每次购买一个,同时在每次购买后重新计算商品的价格”我>)。事实上,现实世界也是如此。你确定这是错误吗?
  • @tobi303:每笔卖出交易不会产生1的利润。它会产生(100/(supply - 1)) - (100/(supply))的利润,而且供应量是不断变化的,那么为什么你会期望差值是100呢?
  • @LightnessRacesinOrbit:不,我不确定这是一个错误。只是解释与 OP 声明的预期结果的差异。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多