2010-09-05 9 views
-1

je dois répondre à cette question qui semble une énigme ... Je ne sais pas s'il y a une vraie solution ou il est impossible ...notification Afficher chaque étape de différence entre deux valeurs

Questions: Avoir deux doubles valeurs, on est le montant total de l'argent dans le coffre-fort, l'autre seuil d'argent maximum recommandé dans le

sécurité Par exemple: valeur recommandée d'argent (seuil): 1 500

$ montant total est une variable est calculé toutes les 5 secondes par une minuterie, dans cet événement tick tick j'ai la valeur de la valeur recommandée de l'argent et le val ue du montant total d'argent dans le coffre-fort.

Lors de l'événement tick tick, j'ai besoin de vérifier si la valeur de l'argent total est supérieure à la valeur recommandée, et afficher une notification à l'interface utilisateur de l'utilisateur. Mais puisque l'événement du tick timer se produit toutes les 5 secondes, j'ai besoin de montrer une notification la première fois que le montant total est supérieur au montant recommandé, et chaque tranche de différence de 50 $ au-dessus du seuil.

Un exemple (chaque ligne de cet exemple est un événement timer tick):

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 

Et ainsi de suite. Existe-t-il un moyen (calcul mathématique ou algorithme) de montrer cette notification en ne connaissant que ces deux valeurs, sans stocker aucune autre variable en mémoire?

I Impossible de stocker la valeur précédente "montant total" dans une variable.

Je ne sais pas s'il y a une solution mais quelqu'un m'a passé cette question en énigme.

Avez-vous une idée s'il existe une solution à cette question?

+0

Je trouve la question extrêmement confuse. Quelles sont les deux valeurs? 1500 et 50? Et quelle est exactement la question? On dirait que vous pouvez facilement le résoudre si vous gardez la valeur précédente (ce que pour une raison quelconque vous ne voulez pas faire), et je ne vois pas comment vous pouvez le résoudre sans garder la valeur précédente ... – Kobi

+0

Je ne peux pas conserver la valeur précédente, je ne peux avoir que trois valeurs: seuil (1500 $), montant total (variable), dépassement du seuil (50 $). Je ne peux pas stocker la valeur de la valeur précédente: D – aleroot

+0

Est-ce que c'est un devoir? –

Répondre

0

Afficher N notifications, où N = (currentMoney - recommendedMoney)/step où étape = 50?

+0

Cela afficherait plusieurs notifications par tick. 'Chaque ligne de cet exemple est un événement de tick timer –

+0

s prévu et indiqué dans le message original. – Grozz

1

Vous avez besoin de connaître les 1500 $ parce que vous produisez cela. Vous devez connaître la valeur à venir. Vous devez également connaître le contexte précédent, sinon vous ne savez pas quoi faire avec un appel comme

NotifyOrNot (1537 $)

Alors, où il est stocké, vous avez besoin ce contexte. Il y a probablement des façons de le faire avec le nombre de notifications, avec un délégué renvoyé par le délégué que vous avez appelé à l'origine, avec des différences entre les valeurs, etc. - ce sont juste des manières différentes de stocker ce contexte. Vous avez toujours besoin d'un troisième morceau de mémoire. Ou même un 4ème, puisque vous stockez également la différence de pas de 50 $.

0

Vous avez dit que vous ne pouvez pas stocker le dernier montant total dans une variable, mais pouvez-vous stocker d'autres choses? Je pense que vous auriez seulement besoin de la valeur NextThreshold.

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

Je crois qu'il s'agit de devoirs. Je vais supprimer tous les commentaires à cause de cela. Vous aurez besoin de comprendre le code par vous-même.

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