델마당에 재미있는 퀴즈가 올라 왔습니다.


resistance.gif


모든 저항값이 R이라 할 때 전체 저항 값을 구하라는 것이었습니다.




[추론]

 

R1, R2 가 직렬로 연결되어 있을 때 전체 저항 값은 R1 + R2 가 된다(산술 평균).

 

R1, R2 가 병렬로 연결되어 있을 때 전체 저항 값은 (R1*R2)/(R1 + R2) 가 된다(조화 평균).

 

따라서 옆에 3개의 저항이 더 붙었을 때 계산될 수 있는 새로운 저항(Rnext)값은 다음과 같이 계산할 수 있다.


 

         R * (2R + Rprev)

 Rnext = ----------------

         R + (2R + Rprev)




[코드]


#include <stdio.h>

#include "fraction.h"

 

//

//         R * (2R + Rprev)

// Rnext = ----------------

//         R + (2R + Rprev)

//

Fraction getNextResistance(Fraction R, Fraction Rprev)

{

  Fraction Rnext;

 

  Rnext = ( R * (R * 2 + Rprev) )

                    /

          ( R + (R * 2 + Rprev) );

 

  return Rnext;

}

 

void writeFraction(Fraction& f)

{

  double temp = (int)f.n;

  temp /= f.d;

  printf("%lld / %lld (%f) \n", f.n, f.d, temp);

}

 

#define COUNT 16

int main()

{

  Fraction R(1, 1);

  Fraction Rprev = R;

  Fraction Rnext;

 

  for (int i = 0; i < COUNT; i++)

  {

    Rnext = getNextResistance(R, Rprev);

    Rprev = Rnext;

    writeFraction(Rnext);

  }

}




[결과]


R1 = 1 이라고 가정을 하고 다음과 같은 저항값을 가지게 된다.


3 / 4 (0.750000)

11 / 15 (0.733333)

41 / 56 (0.732143)

153 / 209 (0.732057)

571 / 780 (0.732051)

2131 / 2911 (0.732051)

7953 / 10864 (0.732051)

29681 / 40545 (0.732051)

110771 / 151316 (0.732051)

413403 / 564719 (0.732051)

1542841 / 2107560 (0.732051)

5757961 / 7865521 (0.732051)

21489003 / 29354524 (0.732051)

80198051 / 109552575 (0.732051)

299303201 / 408855776 (0.732051)

1117014753 / 1525870529 (0.732051)




[결론]

정답은 양쪽에 있는 2개의 저항을 합하여 약 "2.732051 R" 이 된다.



[다운로드]