2013-02-19 8 views
-1

정수 유형 인 가중치를 백분율로 편집 할 수 있어야합니다. 예를 들어가중치 및 백분율

: 나는 다음과 같은 무게를 가지고 : 지금은 기존의 무게를 편집 또는 비율 입력에 의해 새로운 무게를 추가 할 수 있도록하려면

 
Var Weight 
x  100 
y  50 
z  50 

So z is 25% ,y is 25% and x is 50% 

을, 어떻게 가중치가 있는지 확인 할 수 있습니다 여전히 정수형이 될 것이고 나는 반올림이 필요하지 않을 것입니다.

예를 들어 총 가중치에서 25 %가되는 새 가중치를 추가하려면 어떻게 계산합니까? 이를 달성하기 위해 다른 가중치 (증가/감소)를 변경할 수 있습니다.

그러나 여기에서 필요한 조건은 가중치가 정수로 유지되고 새/편집 가중치의 백분율이 요청되는 것입니다.

NewWeight = (합계 * RequestedPerecentage)/(1-RequestedPerecentage)

: 나는 가중치가 쉽게 한 후 정수있을 것입니다 있는지 확인하지 않은 경우

, 방금 다음 식을 사용할 수 있습니다

하지만 그럴 ...

+1

값을 잘린 형태로 표시 할 수 있지만 코드의 값을 수레로 잡고 값을 int로 캐스팅하면 C#에 값이 표시됩니다. 'var xValue = (int) x;' –

+0

예 이 접근 방식은 결국 정밀도를 잃게 될 것입니다 ... –

+1

"이것을 달성하기 위해 다른 가중치를 변경할 수 있음을 공지합니다". 무게를 어떻게 바꿀 수 있는지에 대한 특별한 제약이 있습니까? 그렇지 않다면 문제는 쉽습니다. 목록에 X %의 가중치를 추가하려는 경우 모든 가중치를 감소시키고 처음에 0을 0으로하고 첫 번째 가중치를 (100-X)로 증가/감소시킵니다. 첫 번째 예를 들자면 결과는 x = 75, y = 0, z = 0, new_value = 25입니다. – Kevin

답변

2

목록에 w %의 가중치를 추가한다고 가정 해 봅시다. 첫 번째 예인 경우 w = 25입니다.

먼저 현재 가중치의 합계를 찾습니다.

x 100 
y 50 
z 50 
---- 
Total 200 

각 현재 가중치에 (100-w)를 곱합니다.

x 7500 
y 3750 
z 3750 

이전에 찾은 합계를 곱하여 목록에 추가하십시오.

x 7500 
y 3750 
z 3750 
w 5000 

당신은 모든 가중치의 GCD으로 각각 나누어 자신의 작은 형태로 숫자를 줄일 수 있습니다.

x 6 
y 3 
z 3 
w 4 

이 방법을 사용할 때 오버플로 오류에주의하십시오. 일종의 bignum 데이터 형식을 사용하는 것이 가장 좋습니다.

+0

고마워요! 그게 제가 찾고 있던 대답입니다 - 저는 이것을 단지 생각하고 여러분이 여기서 대답하는 것을 보았습니다. 다시 한 번 감사드립니다! –