(퀴즈)1부터9까지의 숫자를 써서 abc+def=xyz 가 되는 조합

[목차(도우미)]
How can we solve equation abc+def=xyz? Simply, MAN+PRO=YES.
이 문제는 어느 방학 숙제를 풀어 달라는 인터넷 페이지에서 부모들이 열심히 풀어주는 모습을 보았으나 모든 가짓수를 구한 것이 아니어서 직접 계산해 본것이다. 물론 나는 방학 숙제를 대신해 줄 생각은 없다.

문제(I) - 세자리수의 덧셈

1, 2, 3, 4, 5, 6, 7, 8, 9를 각각 한번씩만 써서 세자리수의 덧셈 등식을 푸는 문제다. 이런 문제는 어려운 문제라고는 할 수 없지만 손으로 풀려면 많은 경우의 수를 나누어 조건을 맞추어 가야 한다.


MAN
 abc라고 쓰면 재미가 없기 때문에 
+
PRO
바꾸어 쓴다.
=
YES
(여기서 알파벳은 1 ~ 9의 서로다른 숫자)

총 가짓수

답은 336가지다.

129 + 357 = 486 --- 첫번째 답
129 + 438 = 567
129 + 654 = 783
129 + 735 = 864

(중간 생략)

763 + 182 = 945 --- 숫자 위치 바꾼 답이 또 보인다
782 + 154 = 936
782 + 163 = 945
783 + 162 = 945
784 + 152 = 936 --- 마지막 336번째 답

해설과 의미

기호로 본다면 MAN + PRO = YES 가 되는 형태로서 덧셈은 기본적으로 교환법칙이 성립하므로 한가지의 답(solution)을 구할 수 있으면 각 자리수를 교환한 숫자도 답이 된다.즉 PAN + MRO = YES 도 답이 되므로 2개씩 교환한 2*2*2=8개의 답을 구할 수 있다. 다만 PRO + MAN가 되는 경우도 있으므로 336가지는 편의상 모두 가짓수에 포함시킨것이다.

직접 예를 들면
129 + 654 =783 가 답이므로
624 + 159 =783 도 답이된다.(10자리수만 바꾼 것이다.)

또한 각자릿수의 합이 10을 넘기지 않을 경우에는 자릿수 바꿈도 답이 될 수 있다. 그러면 16개쌍이 답이 된다. 이 가짓수는 8가지, 16가지를 모두 각각의 가짓수로 셈한 가짓수이다.

그중 일부만 공개한다. (일부만 공개하는 이유는 방학숙제로 이런 유형이 나올 경우, 그냥 베껴서 내는 폐단을 방지하기 위해서 이다. 학생들을 위한 방침입니다) 숫자를 교환해 보면 위의 해답을 가지고도 7배이상 가짓수의 답을 얻어낼 수 있다.

일전에 "1부터9까지의 숫자를 써서 100을 만드는 연산방법"를 풀었던 것을 공개했는데, 아무도 댓글은 없었지만 방문자가 많았던 것으로 보아 흥미있는 퀴즈였다고 생각한다.

[학생들을 위하여] - (퀴즈)1부터9까지의 숫자를 써서 100을 만드는 연산방법

(국화 계열의 꽃인듯 싶다. 가운데 모여 있는 꽃술을 보면 경이로울 따름이다.)

문제(II) - 네자리수의 곱셈  

1, 2, 3, 4, 5, 6, 7, 8, 9를 각각 한번씩만 써서 네자리수의 곱셈 등식을 푸는 문제다.


COPY

+
   A

=
LINE
(여기서 알파벳은 1 ~ 9의 서로다른 숫자)

총 가짓수

의외로 답은 2가지뿐이다.
1738 * 4 = 6952
1963 * 4 = 7852

프로그램 소스

1에서 9까지 한번씩 쓰는 프로그램을 브라우저상에서 실행되는 자바스크립트로 작성하였다. 그리고 이 프로그램은 일부러 네자리수의 곱셈을 예로 들고 있다.

파일명:digit.html
digit.html

function showResult(n1, n2, n3, n4, n5, n6, n7, n8, n9) {
  var  A, B, C, strLine;

  //원하는 계산식
  A = ((n1*10 + n2)*10 + n3)*10 + n4;
  B = n5;
  C = ((n6*10 + n7)*10 + n8)*10 + n9;
 
  //계산결과의 표현처리
  if ((A * B) == C) {
    document.write(A + " * " + B + " = " + C);
    document.write("<br>");
  }
}

function getDigit() {
var FIsUsed = new Array();
var L1, L2, L3, L4, L5, L6, L7, L8, L9, nCount, nStart, K;

  for (K = 0; K < 10; K++) {
    FIsUsed[K] = 0;
  }

  //Timer Start
  document.write(new Date());document.write(" started <br>");
  document.write("Result of Calculation by manofpro.tistory.com <br>");
  document.write("<br>");

  //loop
  for (L1 = 1; L1 < 10; L1++) { if ( FIsUsed[L1] == 0 ) { FIsUsed[L1] = 1;
  for (L2 = 1; L2 < 10; L2++) { if ( FIsUsed[L2] == 0 ) { FIsUsed[L2] = 1;
  for (L3 = 1; L3 < 10; L3++) { if ( FIsUsed[L3] == 0 ) { FIsUsed[L3] = 1;
  for (L4 = 1; L4 < 10; L4++) { if ( FIsUsed[L4] == 0 ) { FIsUsed[L4] = 1;
  for (L5 = 1; L5 < 10; L5++) { if ( FIsUsed[L5] == 0 ) { FIsUsed[L5] = 1;
  for (L6 = 1; L6 < 10; L6++) { if ( FIsUsed[L6] == 0 ) { FIsUsed[L6] = 1;
  for (L7 = 1; L7 < 10; L7++) { if ( FIsUsed[L7] == 0 ) { FIsUsed[L7] = 1;
  for (L8 = 1; L8 < 10; L8++) { if ( FIsUsed[L8] == 0 ) { FIsUsed[L8] = 1;
  for (L9 = 1; L9 < 10; L9++) { if ( FIsUsed[L9] == 0 ) { FIsUsed[L9] = 1;
    //여기가 계산하는 함수
    showResult(L1, L2, L3, L4, L5, L6, L7, L8, L9);

    FIsUsed[L9] = 0;}}
    FIsUsed[L8] = 0;}}
    FIsUsed[L7] = 0;}}
    FIsUsed[L6] = 0;}}
    FIsUsed[L5] = 0;}}
    FIsUsed[L4] = 0;}}
    FIsUsed[L3] = 0;}}
    FIsUsed[L2] = 0;}}
    FIsUsed[L1] = 0;}
  };

  //Refresh
  document.write("<br>");
  document.write(new Date());document.writeln(" ended <br>");
}

실행하기 위해서는 파일을 다운로드 하여 텍스트 편집기 또는 브라우저의 편집기에서 내용을 확인해 본후에 고치고 싶은 부분을 고친다. 그리고 더블클릭하면 브라우저에서 열리는데 "Calculate" 단추를 누르면 끝난다.

그외의 이야기

이것은 원래 델파이 코드로 작성한 것이지만, 브라우저에서 실행되는 자바스크립트로 번역하였을 때 어느 정도의 실행속도가 되는지도 궁금하고, 또 컴파일러가 없어도 쉽게 시험해 볼 수 있는 언어이기 때문에 자바스크립트를 써서 작성한 것이다. 결과는 윈도 컴퓨터에서 델파이 코드로 작성한 것과 매킨토시에서 자바스크립트로 작성한 코드은 약간의 처리상의 차이는 있지만, 계산 속도상의 차이는 거의 없었다. 물론 매킨토시의 컴퓨터 성능이 좋은 것을 고려하지 않은 측정 결과다.
혹시 아주 느린 컴퓨터가 아니라면 대략 5초 전후에 9*8*7*6*5*4*3*2*1 의 32만번 계산 결과가 수행될 것이다. 이정도의 계산이 2-3초만에 계산 되었다는 것이 경이로울 따름이다.

by 금메달.아빠 on 2010. 8. 21. 23:32