2011-11-03 5 views
0

안녕하세요 저는 아래 질문을 프로그래밍해야합니다. (내 코드는 그 밑에 있습니다.) 그러나 일단 질문을 읽으면 모든 이전 숫자를 추가하는 코드가 필요하다는 것을 이해하게 될 것입니다.이것이 올바른 코드인지 확인하십시오.

: 누군가가 내 코드를 볼 수 있다면 0으로

같은 질문을 계속 생겨나 내가 대답으로 작동하지 않았다 뭔가를하려고 이미 그 일을하는 경우 말해 그렇지 않은 경우 것은 그것에 대해 갈 수있는 방법

아시다시피 체스 게임의 발명가는 꽤 영리한 동료였습니다. 이야기가 진행됨에 따라 발명가는 게임을 에게 전했습니다. 왕과 왕은 매우 기뻤습니다. 임금은 발명가가 지불로 원하는 무엇 물었다. 그는 첫 번째 사각형 인 에 대한 곡물 곡물을 요청했으며 다음 63 개의 정사각형 각각을 이전 스퀘어의 두 배로 갖도록했습니다. 이야기가가는대로, 임금은 동의한다, 그러나 또한 최종 지불에 의해 만족 된 . 킹 곡물을 계산하는 프로그램을 만듭니다. 대답을 파운드로 표현하십시오. 추측하면 파운드에 7000 그레인이있다.

MY CODE :

count = 0 
number1 = 1 
num = 2 

while count < 63: 
    num = num * 2 
    count += 1 

print "He payed ", num, " Pounds." 
+0

Welcome to Stack Overflow! 숙제 질문에 [태그 : 숙제]로 태그를 달아주세요. 코드를 수정하기 만하면 답변을 더 잘 설명하고 시간을 단축 할 수 있다는 지표를 제공합니다. :) – sarnold

+1

실제로 제곱의 합이 1.^n은 2^n-1 곡물이기 때문에 금액을 합계하지 않아도됩니다. 실제로, 여기에 완벽한 해결책이 있습니다 :'print (pow (2,64) -1)/7000'. 당신이 나 한테 물어 보면 친절한 프로그래밍 숙제. – JJJ

+0

작동하지 않는 것을 시도했다면 그 사실을 보여 주어야합니다. 아마도 그것은 거의 옳았고 ew는 그것을 알아 차릴 것입니까? – hugomg

답변

2
count=0 
number1=1 
num=2 

while count<63: 
    num=num*2 
    count+=1 

print"He payed ",num," Pounds." 

몇 가지 의견 : 당신은 당신의 코드에서 number1를 사용하지 않는 - 그것은 최선의 자신의 존재를 쉽게에서 당신을 방해 수, 사용되지 않는 변수를 제거하기를 코드의 실제 흐름. 둘째로, num=2으로 시작하기 때문에, 실제로 평소보다 큰 보드의 65 번째 칸에 곡물 수를 생각해 낼 것입니다.

하지만 사용 가능한 깔끔한 대수 트릭있다 : 그래서

1 + 2 + 4 + ... + 2^n == 2^(n+1) - 1 

대신 계산할 경우 :

2^64 - 1 

당신이 요구 시리얼 곡물의 수를 얻을 수 있습니다가. (I 평소 수학적 표기법이 답을 준합니다 - 하지 파이썬 표기 2^64는 않습니다 파이썬에서 다른 것을 대신 exponentiation에 대한 **를 사용합니다...)

을 다음 파운드로를 얻으려면 7000에 의해 해당 번호를 분할 질문 궁극적으로 싶었어.

물론 운동의 전체적인 포인트가 루핑을 가르치는 것이라면 대수 평등은 운동의 목적에 어긋납니다. 그러나 이러한 종류의 평등은 프로그래밍의 중요한 부분입니다.

+1

2^64 - 1이되어야합니다 ... 첫 번째 사각형은 2^0이므로 64 번째 사각형은 2^63입니다. – Ord

+0

@Ord, _thanks_. 쳇. 심지어 프로그램 조각에서 과도한 계산을 언급 한 후에 ... – sarnold

0

대답에 대한 "바로 가기"에 대한 sarnold의 대답을 참조하십시오. 루프 동안 읽어야하는 동안 단 하나 개의 입자가 처음 평방

  • 지불 된 이후,

    1. NUM 1로 시작한다 : 당신은 루프를 통해이 작업을 수행하려는 경우, 다음 코드를 다음과 같이 변경합니다 카운트 < 64 ... 그런 식으로 루프가 보드의 각 사각형에 대해 정확히 64 번 실행됩니다.
    2. 아마도 total이라고하는 새 변수를 만듭니다. 0으로 초기화하십시오.각 num=num*2 행 다음에 가서 total += num - num은 왕이 한 칸을 지불 한 금액 만 제공하므로 전체를 사용하여 모든 칸에 대한 결과를 누적해야합니다.
    3. 끝에 7000 알갱이가 있기 때문에 결국 anser (total)를 7000으로 나눕니다.

      1. 대신 잠시 동안의 for 루프를 사용해보십시오 :

      또한, 몇 가지 방법은 코드를 청소합니다. 그렇다면 명시 적으로 카운트를 증가시킬 필요가 없습니다. for count in range(0,64): 한 다음 사용자의 명시 적 계산의 선언 (count=0) 대신이 단어 문제 거의 많은 단계가있다 num=num*2

  • 0

    count+=1

  • 사용 num *= 2을 삭제할 : 당신은 사용할 수 있습니다 첫 번째 광장

    +----+----+-- 
    | | | 
    | 1 | | 
    +----+----+-- 
    | | | 
    | | | 
    +----+----+-- 
    | | | 
    

    각 사각형 배에

    일을 시작으로 '곡물': 그것은 그림을 그리는 데 도움이 될 수

    +----+----+-- 
    | | | 
    | 1 | 2 | 
    +----+----+-- 
    | | | 
    | | | 
    +----+----+-- 
    | | | 
    

    지금까지 너무 좋아. 우리는하지만, 얼마나 많은 곡물 총에 관심이있는, 그래서 왕은

    1 + 2 = 3 
    

    의 비용이 모두 사각형이 아니라 마지막을 지불해야했다. 계속 : 등등

    +----+----+-- 
    | | | 
    | 1 | 2 | 
    +----+----+-- 
    | | | 
    | 4 | 8 | 
    +----+----+-- 
    | | | 
    
    1 + 2 + 4 + 8 = 15 grains 
    

    와, 우리는

    1 + 2 + (64 times) grains 
    

    것으로 판명 어떤 번호를하게 될 겁니다.

    마지막으로 한 가지 문제가 있습니다. 당신은 대답을 "곡물"이 아니라 "파운드"로 표현해야하므로, 결과를 올바른 단위로 변환해야합니다.

  • 관련 문제