有没有办法找到确切的数字?

时间:2018-02-03 21:02:26

标签: java math

有两个地方出售自行车和设备。其中一个的起始价格为150(不要介意该单位),而且每天租用自行车它的成本为13。 另一个地方的起始价格为200,费率为10(每天单位)。

所以这就是qustion。两个人以什么价格相撞?

我试图解决这个问题,但由于我在编程方面的经验有限,我无法找到确切的数字。
我得到的结果是370,但是当我把它放在geogebra(一个简单的数学程序)时,它的结果是366,66。

public class Challenges{
    public static void main(String[] args) {
        int StartPrice1 = 200;
        int StartPrice2 = 150;

        int hk1 = 10;
        int hk2 = 13;

        boolean running = true;
        while(running){
            if(StartPrice1 <= StartPrice2){
                System.out.println(StartPrice1);
                break;
            } else{
                StartPrice1+=hk1;
                StartPrice2+=hk2;


            }
        }
    }
}

4 个答案:

答案 0 :(得分:0)

如果您不能在一天中的一小部分时间内租用自行车,那么您的计划是正确的。

geogebra回答: 假设x =成本满足所需的天数。

200 + 10x <= 150 + 13x

解决x;你得到x = 16.667(四舍五入后)。因此,答案是200 + 10 * 16.67 = 366.67

答案 1 :(得分:0)

两家商店的价格是否相同?

| Day Number | Shop 1 | Shop 2 |
|           0|     150|     200|
|           1|     163|     210|
|           2|     176|     220|
|           3|     189|     230|
|           4|     202|     240|
|           5|     215|     250|
|           6|     228|     260|
|           7|     241|     270|
|           8|     254|     280|
|           9|     267|     290|
|          10|     280|     300|
|          11|     293|     310|
|          12|     306|     320|
|          13|     319|     330|
|          14|     332|     340|
|          15|     345|     350|
|          16|     358|     360|
|          17|     371|     370|
|          18|     384|     380|
|          19|     397|     390|
|          20|     410|     400|

正如您所看到的,没有一天,2家商店的价格相同,在第16天,商店1的成本为358,商店2的成本为360,而在第17天,商店1的成本为371,商店2的成本为370。

两家商店的价格“碰撞”是什么意思

如果您对碰撞的定义是交换价格,那么您的程序是正确的。 Geogebra在当天给出了两个商店价格相同的点,但你永远不会支付部分时间,所以这个答案不太可能是有用的。

答案 2 :(得分:0)

我试图更新计数器每秒更新价格,而不是每天提高准确度,请看下面的结果(我在评论中对正确的行以及本答案的最后部分做了一些解释,以明确说明什么正在进行此代码):

public static void main(String[] args) {
    double StartPrice1 = 200;
    double StartPrice2 = 150;

    double hk1 = 10;
    double hk1StepPerSecond = hk1 / 86400; // 86400 seconds are in 24 hours :-)

    double hk2 = 13;
    double hk2StepPerSecond = hk2 / 86400;

    double days = 0; // to show how many days needed to collide
    boolean running = true;

    while(running){
        if(StartPrice1 <= StartPrice2){
            System.out.println("Price when collision has been detected: " + StartPrice1);
            break;
        } else{
            StartPrice1+=hk1StepPerSecond; // price increased after 1 second - not 1 day to improve accuracy
            StartPrice2+=hk2StepPerSecond; // price increased after 1 second - not 1 day to improve accuracy
            days = days + 1; // incrementing number of days
        }
    }
    System.out.println("How many days to detect collision: " + days / 86400); // just to print number of days to collide
    System.out.println("How many seconds to detect collision: " + days);
}

输出你得到:

Price when collision has been detected: 366.6667824049821
How many days to detect collision: 16.66667824074074
How many seconds to detect collision: 1440001.0 // Collision detected after 16 days, 16 hours and 1 second

说明:

您从代码中获得的结果似乎并没有那么糟糕,您会失去一点准确性 - 您可以在每天凌晨12:00检查价格,并在{{1等于370,这是第一次小于StartPrice1 - 但StartPrice1和StartPrice2的等式并没有恰好发生在12:00 - 它发生在几个小时之前,但你的代码没有要检查每秒,甚至几分之一秒的正确精度,只需在12:00检查值即可。我希望对你来说更容易理解,我试图将代码的准确性从1天提高到1秒。

答案 3 :(得分:0)

您的问题是使用整数,而您的答案不是保证整数。并且您的算法试图计算第二个商店的起始价格何时与第一个商店的起始价格相等(或者比更贵)。你的问题想知道他们何时完全平等。

通过递增整天,这不是保证,因为价格可能在一天中间变得相等。您需要找出您已经过去的金额的天数差异,然后再添加回上一次迭代,以这些汇率计算部分日的费用

但是,不是采用这种方法,计算机图表在矩阵运算中非常有效,因此将问题建模为矩阵代数。设p为最终价格,d为天数。你正在解决p。

13d - p = -150
10d - p = -200

Apache Commons Math可以帮助您解决这个问题。第3.4节

或者你可以使用普通线性代数。让d为天数,找到价格相等的时间

13d + 150 = 10d + 200  
13d = 10d + 50
3d = 50
d = 50/3

d插回等式的一边以查找价格