2011-09-23 9 views
0

소계가 1836.36 인 장바구니가 있어야한다고 가정 해 봅시다. 가격의 범위가있는 목록에서 여러 제품을 합산하여이 정확한 금액을 달성해야합니다.루비와 수학 문제

9.99, 29.99, 59.99에 몇 가지 제품이 있으며 원하는 부분합을 충족시키기 위해 각각 몇 개를 추가 할 수 있습니다. 어떻게 Ruby를 사용하여이 문제에 접근 할 수 있습니까?

가격 목록을 먹이로 삼아서 스크립트가 부분합에 도달 할 때까지 스크립트를 추가 한 다음 부분 합계에 도달하는 데 필요한 가격을 뱉어내는 방법을 생각했습니다. 어떻게 접근해야할지 모르겠습니다. .

모든 제안은 환영하며 미리 감사드립니다. 아이디어를 기대합니다.

+0

모든 가격은 99로 끝나나요? 그러면 아이템이 몇 개인 지 쉽게 알 수 있습니다. –

+1

이 작업을 수행하는 코드 또는 수학 알고리즘에 대한 도움을 받으십니까? –

+3

제공되는 값으로 명확한 솔루션이 있다고 가정하면 이것은 배낭 문제입니다. http://en.wikipedia.org/wiki/Knapsack_problem 수학적으로 해결할 수 있습니다. – Gazler

답변

1

9.99 * X + 29.99 * Y + 59.99 * 정수

의 범위 내에서 X, Y, Z의 모든 순열을 통해 Z = 1836.36

무력 대하여 반복 :

(0..9).each do |x| 
    (0..9).each do |y| 
    (0..9).each do |z| 
     puts "x #{x} y #{y} z #{z}" if (x * 9.99 + y * 29.99 + z * 59.99 == 1836.36) 
    end 
    end 
end 

합계가 1835.36이 아닌 모든 응답을 무시합니다.

이와 비슷한 것 ... 테스트하지 않았습니다. 아마도 통과하지 못할 경우를 무시하기 위해 조정 및 최적화 할 수 있습니다.

+0

이것은 작은 고정 된 수의 제품에 대해서는 효과가있을 것이라고 생각하지만, 세 가지 경우 모두 9를 사용하는 대신에 ceil (total_price/article_price)로 계산되어야한다고 생각합니다. 다른 두 항목. – derp

+0

이 솔루션도 확인해 보겠습니다. 실제로 잘 작동하는지 확신 할 수 없습니다. 내가 처리 할 제품 가격 목록이 아주 많습니다. – r3nrut