2010-12-17 4 views
3

이 수수께끼를 프로그래밍 방식으로 해결하려면 어떻게해야합니까? 누군가가 의사 코드 같은 것을 도와 줄 수 있습니까?9의 수수께끼를 프로그래밍 방식으로 해결할 수있는 방법은 무엇입니까?

사업자의 수와 구 (9)의 결합

나인 9S

+, -, *, /, (,), 표현할 수없는 가장 작은 양의 정수가 무엇인가?

힌트 :

  1. 대답은 0이 아닌. 다음과 같이 0을 표현할 수 있습니다. (9-9) * (9 + 9 + 9 + 9 + 9 + 9). 또한 0은 양의 정수가 아닙니다.

  2. 답변은 하나가 아닙니다. 다음과 같이 표현할 수 있습니다. 9 - (9 * 9 - 9)/9 + 9 - 9 + 9 - 9

  3. 트릭 질문이 아닙니다.

  4. 괄호를 올바르게 처리해야합니다.

참고 :

  • 당신은 지수를 사용할 수 없습니다.
  • 연결할 수 없습니다 (예 : 두 개의 9를 함께 사용하면 99가됩니다).
  • - 연산자는 바이너리 또는 단항 형태로 사용할 수 있습니다.
  • 이 실제로 유명한 퍼즐과 인터넷의 주위에 유혹 많은 솔루션은 아마 거기에 기본 10.

을 가정합니다. 나는 그 중 어떤 것이 맞는지 확실하지 않습니다. 아무도 잘 설명 솔루션을 가지고 있습니까?

+0

은 운영자가 인정 과부하되어 입니까? : S –

+0

@ : closers : 왜 주제 끄기? 설명하는 마음? – Quixotic

+2

두 가지 주된 이유로이 주제와 관련이 없습니다.(1)이 문제는 근본적으로 프로그래밍과 관련이 없습니다. ** 수학 ** 문제입니다. (2) 특정 문제를 해결하려고합니까? '코드 골프 (Code Golf) '라는 질문을하고 싶습니까? 지금까지 뭐 해봤 어? 나는 그 선을 따라 아무것도 보지 못한다. ... 달러 기호 표기법이 뭐니? –

답변

8

대답은 195, 여기에 단순히 exp1 OP exp2에서 새로운 표현을 형성하여 가능한 모든 표현을 축적 일부 파이썬 코드입니다. 그것은 내 PC에서 0.165s에서 실행됩니다.

exp = [set() for _ in xrange(10)] 
exp[0].add(0) 
exp[1].update([9, -9]) 
for i in xrange(1, 10): 
    for a in list(exp[i]): 
    for j in xrange(i, 10): 
     for b in list(exp[j-i]): 
     exp[j].update([a+b, a-b, a*b]) 
     if b != 0: 
      exp[j].add(a/b) 

n = 0 
while n in exp[9]: 
    n += 1 
print n 


편집 : 답변은 정확한 정수 (그리고 정수 나누기의 단지 둥근 결과) 후 검사가 분할이 완료되면 수행해야이어야합니다. 규칙의 해석에서

if ((b != 0) and ((a/b) == float(a)/b)): 
     exp[j].add(a/b) 

, 새로운 답은 138이 (기존 버전이 10분의 1,386 [또는 -1386/-10] 계산하고 138 가져)

관련 문제