2010-12-05 2 views
4

매일 두 배의 돈을 버는 N 일을주는 것이 가장 효율적인 방법입니까?금액이 매일 두 배가되는 경우 가장 효율적인 javascript 알고리즘

첫 번째 날 : $ .5를 받았습니다.
둘째 날은 : 당신은 지금 당신이 $ 1.5
일 세 가지고, 하루에 한 $ 1과 두 배를 부여 : 당신은 일이 $ 2와 두 배를 부여하고 지금은 그래서 $ 3.5
그리고있다.

function calcit3() 
{ 
    var cur_total = .5; 
    var prev_total = 0; 
    var days = 20; 

    for (z = 1; z < days; z++) 
    { 
    cur_total = cur_total * 2; 
    prev_total = cur_total; 
    } 

    return (cur_total + prev_total); 
} 

이는 단지 전염병에 불과합니다. 사이클이나 아무것도 면도하려고하지 않습니다.

감사합니다.

편집 :

alt text

+1

이 숙제가 있습니까? 그와 관련해서는 아무 문제가 없지만, 그렇다면 그렇게 태그를 달아야합니다. –

+0

Na, 숙제가 아닙니다. 그냥 watercooler 질문 및 모두 다른 대답을했다. – evets

+0

Heh, 숙제 검사원은 항상주의를 기울이고 있습니다 :) 분명히 그것이 학교 대수학 과정에서 잘 알려진 문제이기 때문에 분명하지 않습니다. http://en.wikipedia.org/wiki/Geometric_progression –

답변

9

당신이 설명이 정상적으로 말씀하지 않습니다 제공 한 코드입니다.

초기 금액이 인 경우 다음은 내가 일 날에받을 금액이 a * 2^i이며, N일 후 합이 0에서 N에 그의 합계입니다.

Simplifying

, 우리는 얻을 :

a * (2^(n+1) - 1) 

것은 아무 필요 루핑.

+0

예. 그게 낫다. – evets

7

문제를 올바르게 이해하면 0.537로 시작하여 매일 두 배가되는 간단한 geometric progression입니다. 총 것도 있지만,이 일련의 조건에 n 합 없다 : 여기 a = 0.5, r = 2

a * (r^n - 1) 
------------- 
    r - 1 

; 대체 산출 식 : 자바 스크립트

0.5 * (2^n - 1) 

또는 동등 :

return 0.5 * (Math.pow(2, days) - 1); 
+0

이것은 정답이 아닙니다. 결과는 524,287.5입니다. 나는 그것이 393,216을 가져야한다고 생각한다. – evets

+1

제시 한 규칙을 감안할 때 수학은 옳습니다. 매일 매일 0.5 배를 더하면 393216.0을 얻을 수 있습니까? (예 : 매일 전체 숫자를 더할 것입니다)? – cHao

+0

예, 죄송합니다, 저의 실수입니다. 네가 옳아. 감사. – evets

0

방법에 대해 : 필요

return (Math.pow(2.0, days + 1) - 1) * initial_amount; 

없음 반복. .5의 initial_amount가 주어지면 1 일 후에 (2^2-1) * .5 == 1.5가되고, 2 일 후에 (2^3-1) * .5 == 3.5,

참고로 1 일이 아닌 0 일의 initial_amount를 가정합니다. 1 일째를 시작하려는 경우 표현식에서 + 1 만 제거하면됩니다.

돈에 대해서 이야기하는 경우 공식은 다소 이상합니다. 돈은 일반적으로 매일 두 배가되며 초기 금액을 포함합니다. 따라서 1 일에 2 달러 2 달러, 3 달러 4 달러 등으로 1 달러를받습니다.

+0

돈에 흥미로운 점이 없습니다. "어이, 우리는 당신에게 전날의 돈을 두 배나 줄 것입니다."라고 말한 규칙 일뿐입니다. 기간이 끝나면 얼마가 남을 것입니다. – evets

+0

그러면 ((2^end) + (2^end-1) + ... + (2^1) + (2^0)) * initial_amount로 끝납니다. 이 시리즈는 ((2^(end + 1)) - 1) * initial_amount와 같습니다. – cHao

0

맞습니까?

return parseInt(Array(days).join('1'), 2) + 0.5 
+0

이상한 접근 방식이지만 0.5의 시작 양만큼 작동 할 수도 있습니다. 비록 당신이 쉽게 배열을 쓰는 것에 의지하지 않고 숫자를 계산하고, 합쳐서 결과 문자열을 int로 파싱 할 수는 있지만 ... – cHao

관련 문제