显示两个值之间差异的每个步骤的通知

时间:2010-09-05 09:08:49

标签: c# math timer

我必须回答这个似乎是个谜语的问题...我不知道是否有真正的解决方案或者这是不可能的......

问题:有两个双倍值,一个是保险箱中的总金额,另一个是保险箱中建议的最高金额门槛

例如:建议的货币价值(门槛值):1,500美元

总金额是一个由计时器每5秒计算一次的变量,在这个计时器刻度事件中,我有一个推荐的货币价值和保险箱中总金额的值。

在计时器刻度事件中,我需要检查总金额是否大于建议值,并向用户UI显示通知。但由于计时器滴答事件每5秒钟发生一次,我需要在第一次显示总金额大于建议金额时发出通知,并且每隔50美元差异超过阈值。

示例(此示例的每一行都是计时器刻度事件):

Total : 1200$ − Recommended : 1500$   → No Notification
Total : 1505$ − Recommended : 1500$   → Notification (first overcoming of threshold)
Total : 1520$ − Recommended : 1500$   → No Notification 
Total : 1537$ − Recommended : 1500$   → No Notification
Total : 1558$ − Recommended : 1500$   → Notification (first overcoming of 50$ step)
Total : 1574$ − Recommended : 1500$   → No Notification
Total : 1586$ − Recommended : 1500$   → No Notification
Total : 1598$ − Recommended : 1500$   → No Notification
Total : 1612$ − Recommended : 1500$   → Notification (second overcoming of 50$ step)
Total : 1623$ − Recommended : 1500$   → No Notification

等等。有没有办法(数学计算或算法)显示此通知只知道这两个值,而不在内存中存储任何其他变量?

我无法在变量中存储“总金额”之前的值。

我不知道是否有解决办法,但有人将这个问题作为一个谜语传给了我。

您是否知道这个问题是否有解决方案?

4 个答案:

答案 0 :(得分:1)

你需要知道1500美元,因为你正在输出它。你需要知道进来的价值。你还需要知道以前的背景,否则你不知道如何处理像

这样的电话

NotifyOrNot($ 1537年)

因此,只要存储它,您就需要该上下文。有很多方法可以通过通知的数量来完成,从最初调用的委托返回一个委托,值与值之间的差异等等 - 它们只是存储该上下文的不同方式。你仍然需要第三块记忆。或者甚至是第4个,因为你还存储了50美元的差距。

答案 1 :(得分:1)

我相信这是功课。因为这个原因,我会删除所有评论。你需要自己计算代码。

public class ExampleApp
{
    private int _currentMoney = 1450;
    private int _lastNotificationStep = 29; // 50 * 30 = 1500

    [STAThread]
    public static void Main(string[] argv)
    {
        var app = new ExampleApp();
        app.InYourLoop(50);
        app.InYourLoop(30);
        app.InYourLoop(40);
    }

    public void InYourLoop(int deposited)
    {
        int total = _currentMoney + deposited;

        var currentStep = (int) Math.Floor(total/50d);
        if (_lastNotificationStep != currentStep && total >= 1500)
        {
            for (int step = _lastNotificationStep; step < currentStep; ++step)
            {
                Console.WriteLine("Notification of step: " + currentStep + " for total " + total);
                _lastNotificationStep = currentStep;
            }
        }

        _currentMoney = total;
    }
}

答案 2 :(得分:0)

显示N个通知,其中N = (currentMoney - recommendedMoney)/step,其中step = 50?

答案 3 :(得分:0)

你说你不能将最后一笔总金额存储在变量中,但是你可以存储其他东西吗?我认为你只需要NextThreshold值。

int NextThreshold = 1500;
while (true)
{
  int CurrentBalance = GetNextBalance();
  if (CurrentBalance > NextThreshold)
  {
    Console.WriteLine("You spent too much, foo");
    while (NextThreshold < CurrentBalance)
      NextThreshold += 50;
  }
}