2013-05-14 2 views
0

I는이 배열 $ 블록 이 A는, B, C, D빌 구분 나머지 및 어레이는

다른 함수 값을 반환
$blocks["a"] = 20; 
$blocks["b"] = 1000; 
$blocks["c"] = 10000; 
$blocks["d"] = 50000; 

는 358,020이 (그것은 말할 수 상수 값 4 개 항목이 일반적으로 높지만 수십

에 놓을 수 있습니다

나는이 값을 각 항목의 대부분은 존재 방법의 배열을 반환하는 함수를 작성하는 것입니다 방법.

예 출력 someth을 같이 보내고 :

$output["a"] = 1; 
$output["b"] = 3; 
$output["c"] = 0; 
$output["d"] = 7; 

최대 규모의 블록을 시작으로, 얼마나 많은 그 블록은 ... 다음 나머지는 그래서 다음 최대로 전달되고, 값으로

+0

358020은 무엇입니까? 그게 무엇에 해당 되는가? – brbcoding

+0

이 숫자는 게임에서 레벨 간의 학습 포인트 양을 계산하는 함수의 결과입니다. 문제는 사용자가 진행해야하는 "앱 내 구매 내역"의 수를 이해하는 데 도움이되는 것입니다. – Deano

답변

1
calculateNumberCredits(25000); 

function calculateNumberCredits($experience) { 

    # The credits we have 
    $credits = array(
     'a' => '10000', 
     'b' => '2000', 
     'c' => '1000', 
    ); 

    # Keep track of the amount needed per credit 
    $timesCreditNeeded = array(); 

    # Start calculating the amount per credit we need 
    foreach($credits as $creditID => $creditAmount) { 

     # 1) Calculate the number of times the amount fits within the amount of experience 
     $times = floor($experience/$creditAmount); 

     # 2) Calculate the remainder of the above division en cache is for the next  calculation 
     $experience = $experience % $creditAmount; 

     # 3) Cache the number of times the credit fits within the experience 
     $timesCreditNeeded[$creditID] = $times; 

    } 

    echo '<pre>'; 
    print_r($timesCreditNeeded); 

    return $timesCreditNeeded; 

} 

// Will return Array ([a] => 2 [b] => 2 [c] => 1) 

I 맞는 시스템에있는 크레디트를 반복하십시오. 이 예에서 크레딧은 높음에서 낮음으로 정렬됩니다. 이 경우가 아니라면 주문하여 원하는 결과를 얻으십시오.

1) 크레딧마다 크레딧이 특정 사용자의 경험에 맞는 최대 횟수를 찾으십시오. float 숫자는 의미가 없기 때문에 우리는 나누기 결과를 바닥에 둡니다.

2) 크레딧이 맞는 횟수를 찾은 후 다음 반복 (다음 크레딧)의 나머지를 계산합니다. modulus을 계산하여 나머지를 찾을 수 있습니다.

3) 마지막으로 중요한 것은 크레딧이 적용되는 횟수를 캐시하는 것입니다.

희망이 도움이됩니다.

+0

우수 작품! 명확성을 위해 +1 – Deano