我必须回答这个似乎是个谜语的问题...我不知道是否有真正的解决方案或者这是不可能的......
问题:有两个双倍值,一个是保险箱中的总金额,另一个是保险箱中建议的最高金额门槛
例如:建议的货币价值(门槛值):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
等等。有没有办法(数学计算或算法)显示此通知只知道这两个值,而不在内存中存储任何其他变量?
我无法在变量中存储“总金额”之前的值。
我不知道是否有解决办法,但有人将这个问题作为一个谜语传给了我。
您是否知道这个问题是否有解决方案?
答案 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;
}
}