2016-04-07 4 views
0

私はPythonの初心者です...実際、私はプログラミングの初心者です。 Pythonは私が学び始めた最初のプログラミング言語です。Pythonでプログラミングする必要があるパズル?

私は解決するのが好きだったパズルを、練習するためのプログラムを書くことで受け取りましたが、できませんでした。

パズルは以下ました:

は、最初のものは数1を運び、二番目は番号2を運び、それらの一つ一つが、数を持っている、あなたは彼らが円を作るように立って、100人を持っていると言います、...というように、100番の最後の人で終わる...最初の人には、1より大きい数字を持つ人を殺すための剣が与えられました。それは彼が殺すことを意味します2番...そして、彼は3番の次の人に剣を捧げる。そして、1人だけが生き続けるまで、このプロセスは続ける! ...それは誰ですか?

私は手動で解決しようとしましたが、答えは73でした...番号73は生きている人です!

しかし、プログラムする方法はありますか?

ありがとうございました!

+0

含めてくださいペーストビンにそれをアップロードあなたが試したコード。 – MarkyPython

+0

あなたは彼に行くときに番号100を殺すのですか? – Keatinge

+0

私はほとんどのことをするプログラムを持っていましたが、私はこれで終わります: '[97、1、9、17、25、33、41、49、57、65、73、81、89] 97番はここで誰も殺すことができない。 ***あなたは数字を持っている人を殺すことで動かないように見える、剣を持っている人は誰でも殺す次の行にあります – Keatinge

答えて

0

これは楽しい問題です。私の意見では、ピュータンの.pop機能を使用する大きな理由があります。

circle = list(range(1,101)) 
#100 people numbered 1-100 


while len(circle) > 1: #run this code as long as the circle has more than one person 
    print(str(circle[0]) + " kills " + str(circle[1])) 
    survivor = circle[0] #save the survivor to a variable 
    circle.pop(1) #remove the person killed from the list 
    circle.pop(0) #remove the person who survives from the list 
    #now the new start of the list is whoever is next in line 

    circle.append(survivor) #re-add the survivor to the list at the end 

print(str(circle[0]) + "is the winner") #print out the survivor 

これは円の「スタート」は常に円であるため、[0]、2人が戦うとき、勝者と敗者の両方が円を作り、リストから削除されている作品[0]行の横にある誰でも。そして、勝者が戻っ

で彼を入れて、リストの最後に再度追加された私は、円の完全な進化をプリントアウトするために数行を追加し、http://pastebin.com/raw/z6ghuqE3

+0

それはすごかった! :-) ありがとう、あなたのプログラムを勉強して理解しようとします! どこでPythonを学びましたか? –

+0

私は数週間前にgoogles pythonクラス(すべてYouTubeで利用可能)でスタートしました:https://www.youtube.com/watch?v=tKTZoB2Vjukしかし、私は他の言語で多くの背景を持っているので、ピックアップは簡単でした。 – Keatinge

+0

あなたは天才です! :-) ....私はあなたのリンクを確認します...そして、すべてに感謝! –

-1

明らかにあなたはそれを自分で解決しました...どうですか?あなたはPythonを同じようにすることができますか?

あなたはのは

がどのように は、どのようにそれが作られた(人を殺す停止する際に知ってしようとしている生きている人を追跡しようとしているいくつかの異なるものについて考えてみましょう学習練習としてこれをやっているので別の答えを提供してきたので、私は笑う)と はどのようにあなたが正しい軌道に乗ってあなたを取得するには、剣に

に合格しようとしている私は、「Pythonで反復」または「Pythonの制御構造」

のようなものをグーグルでお勧めします反復的なアプローチ私のsoluti私は問題を解決するために再帰を使用します。ここで、関数は終了条件に達するまで自身を呼び出します。

numPeople = 100 
theCircle = list(range(1, numPeople + 1)) 

#Solve with recursion 
def massacreRecursion(theCircle): 
    #Exit condition 
    if len(theCircle) == 2: 
     theCircle.pop(1) #kill the last victim so len(theCircle) == 1 is True 
     print(theCircle[0]) #Print the survivor 
    else: 
     theCircle.pop(1) #kill some poor pleb 
     theCircle.append(theCircle.pop(0)) #rotate the circle left 1 effectively passing the sword right 
     massacreRecursion(theCircle) #do it again and again and again... 

#enter the recursion 
massacreRecursion(theCircle) 
+0

私はそれをやろう! :-) ....そして、ありがとう! ....あなたはどこでPythonを学ぶのが一番いいと思いますか? –

関連する問題