-1


0

2つの値の差の段階ごとに通知を表示する

私は謎に思えるこの質問に答えなければなりません…​ 本当の解決策があるのか​​、それが不可能なのかわかりません…​

質問:2つの二重の値があり、1つは金庫の合計金額、もう1つは金庫で推奨される最大金額のしきい値です

例:お金の推奨値(しきい値):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

等々。 メモリに他の変数を保存せずに、この2つの値のみを知っているこの通知を表示する方法(数学計算またはアルゴリズム)はありますか?

「以前の値の合計」を変数に保存できません。

解決策があるかどうかはわかりませんが、誰かがこの質問をなぞなぞとして渡してくれました。

この質問に解決策があるかどうか、あなたは考えていますか?

4 Answer


1


あなたはそれを出力しているので、1500ドルを知る必要があります。 入ってくる価値を知る必要があります。 また、以前のコンテキストを知る必要があります。そうでなければ、次のような呼び出しで何をすべきかわかりません

NotifyOrNot($ 1537)

そのため、どこに保存する場合でも、そのコンテキストが必要です。 おそらく、最初に呼び出したデリゲートから返されたデリゲート、値の違いなどを使用して、通知の数でそれを行う方法があります。 -それらはそのコンテキストを保存する異なる方法にすぎません。 まだ3番目のメモリが必要です。 または、4分の1でさえ、$ 50の段差を保存しているためです。


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;
    }
}


0


N個の通知を表示します。ここで、「N =(currentMoney-RecommendedMoney)/ step」の場合、step = 50ですか。


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;
  }
}