(퀴즈)1부터9까지의 숫자를 써서 100을 만드는 연산방법

[목차(도우미)]

How can we make the numbers 1,2,3,4,5,6,7,8,9 be 100 by arithmatic operation? What will be the number of the combination of that solution? (2010년2월작성)
1~9 숫자를 나열하고 기호를 넣어서 100이 되는 연산 방법은 몇가지일까?

즉 1+2+3+4+5+6+7+8*9= 100 처럼 1부터 9까지의 숫자를 한번씩만 써서 연산결과가 100이되도록 만드는 것이 몇가지가 있을까? 

사용하는 연산은 + - * / (사칙연산), ^(지수), ""(붙이기 즉 1 2 는 12의 의미), 괄호는 비허용

처음에는 쉬운 것부터

Simple 100 making caculation

1th 1+2+3+4+5+6+7+8*9= 100
2th 1+2+3-4+5+6+7 8+9= 100
3th 1+2+3-4*5+6*7+8*9= 100
4th 1+2+3-4 5+6 7+8*9= 100
5th 1+2+3*4-5-6+7+8 9= 100
6th 1+2+3*4*5/6+7 8+9= 100
7th 1+2+3*4*5 6/7-8+9= 100
8th 1+2+3 4-5+6 7-8+9= 100
9th 1+2+3 4*5+6-7-8*9= 100
10th 1+2-3*4+5*6+7+8*9= 100
:
:중간생략
:
100th 1 2+3*4+5+6+7*8+9= 100
101th 1 2+3*4+5+6-7+8*9= 100
102th 1 2+3*4-5-6+7 8+9= 100
103th 1 2+3*4 5+6*7-8 9= 100
:
:중간생략
:
(퍼가실 때는 허락받으세요.)
149th 1^2 3 4+5*6+7 8-9= 100 ----- 1의 234제곱을 계산하고 있다
150th 1^2 3^4+5*6+7 8-9= 100
151th 1^2^3+4+5-6+7+8 9= 100
152th 1^2^3+4+5*6+7*8+9= 100
153th 1^2^3+4+5*6-7+8*9= 100
154th 1^2^3-4+5 6+7*8-9= 100
155th 1^2^3 4+5*6+7 8-9= 100
156th 1^2^3^4+5*6+7 8-9= 100 -----1의 (2제곱의 (3제곱의 4제곱)) 결과는 1

총 156가지

코스모스

(검산은 복잡하다. 아름다운 코스모스나 보면서 휴식하자. 이 꽃이 모두 몇개나 될까?)

옛날 이야기

이 문제는 1979년 국민학교(초등학교) 탐구생활에 등장하여 약 10가지를 풀어본 후에 대학생이 되어 다시한번 풀어본 문제다. 친하게 지냈던 친구가 어느날 이 문제를 풀고자 혼자서 전산실에서 열중하는 것을 보았다. 그러다가 나에게 아이디어의 도움을 요청했으므로 당시 배우던 포트란을 사용하여 문제를 풀기 시작했다. 그 친구는 학생 과외를 지도하다가 학생이 물어보아서 가르쳐 주겠다는 약속을 한것이 발단이 되었고, 나는 그 친구의 요청에 발을 디디게 된 것이다. 결과적으로 며칠 걸려서 6중 DO 루프를 써서 약간의 트릭을 사용하여 풀었다.

아무 문제없다고 생각하고 실행시켰는데, 처음에만 결과가 나오고 아무리 기다려도 마지막 결과가 나오지 않았다. 1987년 당시에는 IBM호환 기종 AT컴퓨터라는 것이 좋은 컴퓨터의 축에 속하였는데, 전산실 AT머신으로 MS-DOS상에서 최종 결과를 계산하는데 약 1시간이 소요되었다. 그래서 결과가 나오지 않는 것처럼 보였던 것이다. 6개의 연산을 8군데에 차례대로 넣어서 결과를 계산하므로 6의 8제곱에 해당하는 경우의 수를 계산해야하는데 시간이 걸린 것이다.

공대 전산실이 일찍 문을 닫았기 때문에 우리는 상경대 전산실에서 열심히 결과를 기다리면서 일종의 쾌재를 불렀다. 무조건 반복계산이 아니면 도저히 상상하기 어려운 경우의 계산 결과가 나와서 그 가짓수가 100가지를 넘는 것이었다! 이거야 말로 과외 학생에게 자랑스럽게 말할 수 있는 것이었다.

세월은 흘러 포트란 컴파일러를 입수하기 어려워 져서 1997년에는 C/C++를 사용하여 윈도95상에서 다시 한번 취미 계산에 도전해 보았다. 불행인지 다행인지 10년전 소스코드는 친구가 가지고 있었고 나에게는 주요 알고리즘외에 기억하지 않아서 새로이 프로그램을 짰다. 그동안 컴퓨터의 성능도 말할 수 없이 발전하였다. 10년 만에 계산한 결과 10여분 만에 1,679,616가지 계산을 성공적으로 마친 것이다. (놀라운 계산력이다!)

만약 2010년인 지금 컴퓨터로 계산한다면 얼마나 걸릴까? 굳이 실행시켜보지는 않겠지만, 아마 5분도 안걸릴 것이다. 그리고 예전에 이미 계산한 결과를 파일로 저장해 두었기 때문에 여기서는 그 일부를 공개해 두기로 하겠다. 재미있는 결과만을 소개한다.(이미소개했다.)

(더 많은 답이 필요하시거나 궁금한 점이 있으시면 댓글이나 방명록에 남겨 주세요.)

후기 I

네이버, 다음의 지식 검색 서비스에는 이와같은 문제가 질문되어 있고, 답변도 있지만 그 가지수는 10가지를 넘지 못하고 있다. 답변자의 빠른 답변 실력은 감탄할 만하지만, 질문자의 속시원한 답변은 아닐 것이다. 나도 답변을 등록하고 싶었지만 이미 채택된 답변은 추가 등록이 안되고 계정이 없는 사람은 답변에 접근할 수 없다.

그러나 일부러 답변을 등록하고 싶지는 않다. 이런 유형의 문제는 머리를 쓰는 수수께끼 문제로서 가치가 있는 것이고 정확한 가짓수를 찾아내는 것은 프로그램의 영역에 속하므로 답의 형태보다는 답의 가짓수가 궁금한 것이다. 그래서 굳이 모든 156가지의 답을 공개할 필요가 없다고 생각한다. 대체로 10가지 내외의 답을 찾고자 한다면 방학숙제로서 학생들의 계산능력을 배양하기 위함일 것이기 때문에 오히려 많은 답을 공개해 두는 것은 학생들에게 창의적 발상을 위한 도움이 되지 못한다. 

프로그램을 연습해보기 원하는 대학생이라면 이야기는 별개가 되는데, 프로그램 로직이 궁금한 경우라면 댓글이나 방명록에 연락할 방법을 남겨 두기 바란다. 적어도 참고는 될 것이다.

후기 II 2010년8월

결과가 100이 되는 것 뿐 아니라 다음에는 200, 300, ... 1000 이되는 결과를 계산해 보겠다. 현재 매킨토시에서 프로그램 환경을 구축해야 하기 때문에, 당분간은 시간이 걸릴 것이다. 관심있는 분은 기대하시라.

관련글

by 금메달.아빠 on 2010. 12. 4. 07:28