2017-01-16 2 views
-4

업데이트 : 분명히 사람들은 이것이 숙제라고 생각하고 내 질문에 투표를 거절합니다. 그렇지 않습니다. 그것은 대답에서 알 수 있듯이 꽤 복잡한 수학 인 재 수명 비즈니스 로직 질문입니다. 나는이 사이트를 계속 사용할 수 있도록 조금 긍정적 인 표를 주셔서 감사하겠습니다.자유로운 밤을위한 수학 공식이 필요합니다.

무료 숙박 계산기의 공식을 알아야합니다. 무료 숙박 옵션은 다양합니다. 예를 들어 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"); 
} 

어떤 도움을 주셔서 감사합니다!

EDITED : 위의 예에서 줄 바꿈을 업데이트했습니다.

+2

어떤 언어입니까? 나는 PHP를 추측하고 있습니까? – Carcigenicate

+0

또한 문제는 무엇인지 구체적으로 설명합니다. 우리가 당신의 숙제를하기를 원하는 것처럼 보입니다. – Carcigenicate

+0

나는 PHP로 글을 쓰고있다. 죄송합니다. for 루프는 실제로 언어를 지정하지 않아도 될 정도로 충분히 일반적인 것입니다. – Thom

답변

1

실제로 이것은 이 될 것으로 생각했던 것보다 간단합니다. 그 모듈이 핵심이라는 말이 맞았습니다. 필자는 1 년 후에 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))))) 
+0

오 마이! 이것은 대단합니다. 나는 PHP에서 이것을하려고 시도하고 나의 변수에 대한 당신의 어려운 숫자의 일부를 교환했다. 여기에 내가 가진 것이있다. 나는 modulus가 => 밤을위한 급여 일 필요가있는 나의 가정이 정확하다는 것을 모르지만, 작동하는 것처럼 보인다. 나는 많은 시험을 할 것이다. 죄송합니다, 답장에 코드를 삽입하는 방법을 모르겠습니다. – Thom

+0

$ pay_for = 6; $ stay_for = 7; echo ("{$ pay_for}에 지불, {$ stay_for} 동안 머물러십시오.
\ n
\ n"); \t $ modu = $ night % $ stay_for에 대한 ($ 밤 = 1, $ 무료 = 0; $ 밤 <= 22; \t $ not_free = $ 밤 - $ 무료; \t 에코 ("밤 : {$ 밤}, 지불 : {$ not_free} 무료 : {$ 무료}
\ n"); \t if ($ modu> = $ pay_for) { \t \t $ 무료 ++; \t} } 다이 ("완료"); – Thom

+1

@Thom 코멘트에서 코드를 읽는 것은 어렵습니다. 특히 PHP는 그렇습니다. – Carcigenicate

관련 문제