需要免费住宿的数学公式
Need math formula for free nights
更新:显然,人们认为这是一项家庭作业,并且对我的问题投了反对票。不是。这是一个重生的业务逻辑问题,从答案中可以看出这是一个非常复杂的数学问题。我将不胜感激,这样我就可以继续使用这个网站了。
我需要计算一个免费住宿计算器的公式。免费住宿选项可能有所不同。例如付6,住7。付5,住7。
给定变量中的两个数字,我需要能够传递住宿天数,并计算出您支付的数量和免费获得的数量。
例如:
Pay for 5, stay for 7.
1 night = pay for 1, 0 free
2 nights = pay for 2, 0 free
3 nights = pay for 3, 0 free
4 nights = pay for 4, 0 free
5 nights = pay for 5, 0 free
6 nights = pay for 5, 1 free
7 nights = pay for 5, 2 free
8 nights = pay for 6, 2 free
9 nights = pay for 7, 2 free
10 nights = pay for 8, 2 free
11 nights = pay for 9, 2 free
12 nights = pay for 10, 2 free
13 nights = pay for 10, 3 free
14 nights = pay for 10, 4 free
15 nights = pay for 11, 4 free
16 nights = pay for 12, 4 free
17 nights = pay for 13, 4 free
18 nights = pay for 14, 4 free
我在想我需要使用模数,但想不通。
$pay_for = 5;
$stay_for = 7;
for($i=1;$i<=18;$i++) {
$modulo = $i % $pay_for;
echo("nights:{$i}, remainder:{$modulo}<br>\n");
}
感谢您的帮助!
已编辑:在我上面的例子中遗漏了一行所以更新了。
这实际上 比我想象的要简单得多。你是对的,模数是关键。我打算用伪代码来写这个,因为我已经有一年没写 PHP 了,你是对的,这是语言不可知论。
function earned-free-night (nights-stayed) {
return 5 <= (nights-stayed % 7) <= 6;
}
function display-sheet () {
for (var night = 1, free = 0; night <= 18; night++) {
print("Night#: " + night + ", Free nights: " + free);
if (earned-free-night(night)) {
free++;
}
}
}
如果住宿晚数以 7 为模,为 5 或 6,则添加一晚免费住宿。
这是我用来测试它的一些工作 (Clojure) 代码。如果您想尝试编译器,可以在线轻松获得:
(defn free-night? [nights-stayed]
(<= 5 (rem nights-stayed 7) 6))
(defn -main []
(loop [night-n 1
free-nights 0]
(println (str "Night#: " night-n ", Free nights: " free-nights))
(if (<= night-n 18)
(recur (inc night-n)
(if (free-night? night-n) (inc free-nights) free-nights)))))
更新:显然,人们认为这是一项家庭作业,并且对我的问题投了反对票。不是。这是一个重生的业务逻辑问题,从答案中可以看出这是一个非常复杂的数学问题。我将不胜感激,这样我就可以继续使用这个网站了。
我需要计算一个免费住宿计算器的公式。免费住宿选项可能有所不同。例如付6,住7。付5,住7。
给定变量中的两个数字,我需要能够传递住宿天数,并计算出您支付的数量和免费获得的数量。
例如:
Pay for 5, stay for 7.
1 night = pay for 1, 0 free
2 nights = pay for 2, 0 free
3 nights = pay for 3, 0 free
4 nights = pay for 4, 0 free
5 nights = pay for 5, 0 free
6 nights = pay for 5, 1 free
7 nights = pay for 5, 2 free
8 nights = pay for 6, 2 free
9 nights = pay for 7, 2 free
10 nights = pay for 8, 2 free
11 nights = pay for 9, 2 free
12 nights = pay for 10, 2 free
13 nights = pay for 10, 3 free
14 nights = pay for 10, 4 free
15 nights = pay for 11, 4 free
16 nights = pay for 12, 4 free
17 nights = pay for 13, 4 free
18 nights = pay for 14, 4 free
我在想我需要使用模数,但想不通。
$pay_for = 5;
$stay_for = 7;
for($i=1;$i<=18;$i++) {
$modulo = $i % $pay_for;
echo("nights:{$i}, remainder:{$modulo}<br>\n");
}
感谢您的帮助!
已编辑:在我上面的例子中遗漏了一行所以更新了。
这实际上 比我想象的要简单得多。你是对的,模数是关键。我打算用伪代码来写这个,因为我已经有一年没写 PHP 了,你是对的,这是语言不可知论。
function earned-free-night (nights-stayed) {
return 5 <= (nights-stayed % 7) <= 6;
}
function display-sheet () {
for (var night = 1, free = 0; night <= 18; night++) {
print("Night#: " + night + ", Free nights: " + free);
if (earned-free-night(night)) {
free++;
}
}
}
如果住宿晚数以 7 为模,为 5 或 6,则添加一晚免费住宿。
这是我用来测试它的一些工作 (Clojure) 代码。如果您想尝试编译器,可以在线轻松获得:
(defn free-night? [nights-stayed]
(<= 5 (rem nights-stayed 7) 6))
(defn -main []
(loop [night-n 1
free-nights 0]
(println (str "Night#: " night-n ", Free nights: " free-nights))
(if (<= night-n 18)
(recur (inc night-n)
(if (free-night? night-n) (inc free-nights) free-nights)))))