2012-02-22 3 views
-1

나는 월 목록 (TOTAL_NUM_MONTHS)을 받았으며이 목록에서 비례하여 12 개월 만 선택해야합니다. 달의 총 수 (12) 다음 작은 경우주어진 월 목록에서 월의 비례 할당

IF TOTAL_NUM_MONTHS<12 THEN 
    STEP = 1 
ELSE IF (TOTAL_NUM_MONTHS % 12 == 0) THEN 
    STEP = TOTAL_NUM_MONTHS/12 
ELSE 
    STEP = ??? 

그래서, 내가 그들 모두를 선택합니다, 그것은 12 나눌 경우 그때와 같은 단계를 선택합니다 : 지금까지 알고리즘을 다음 한 TOTAL_NUM_MONTHS/12.

질문 : 총 월 수가 12로 나눌 수없는 경우 어떻게해야합니까? 비례 적으로 주어진 개월 목록에서 12 개월을 선택하기 위해 단계를 계산하는 방법은 무엇입니까?

+0

Pls는 아래로 투표 한 이유에 대해 의견을 남깁니다. – Bakhtiyor

답변

1

은 아마 당신은 같은 각각의 반복에 대한 가변 길이의 단계, 뭔가를해야 :

step(i) = step(i-1) + NUM_MONTHS/12.0, step(0) = 0.0 :

및 사용 [참고 단계 (i)는 부동 소수점 수와 정수가 아닙니다] 요소를 선택하려면 floor(step(i)). [여기에 가정하면 NUM_MONTHS > 12]

i이 단계 수입니다. 0 <= i < 12

아이디어는 균일하게 분포하는 단조롭게 증가하는 함수를 만드는 것입니다. 부동 소수점으로 NUM_MONTHS/12 크기보다 균일하게되지 않습니다. 따라서 부동 소수점으로 계산하면 floor(step(i))을 사용하여 정수를 가져옵니다. 어떤 요소가 선택되지

  1. [NUM_MONTHS/12 > 1 때문에]마다 두 단계 사이의 최대 차이 1이다

    이 방법은 2 가지를 보장한다.

NUM_STEPS % 12 == 0이 방법은 사용자의 else if으로 부패하고 동일하게 작동합니다.

+0

내가 여기 무엇입니까? 좀 더 자세하게 설명해 주시겠습니까? – Bakhtiyor

+0

@Bakhtiyor : 나는 몇 가지 것을 편집하고 정리했다. 이 대답에서 당신이 아직도 오해하고있는 것이 있다면 알려주십시오. – amit

+0

좋습니다. 그것이 내가 필요한 것입니다. 대단히 감사합니다. – Bakhtiyor

관련 문제