機器1:投入x個,生產2*x+1個
機器2:投入x個,生產2*x+2個
請設計乙個方案,使得最後剛好擁有n個魔法幣。
輸入:輸入包括一行,包括乙個正數n(1<=n<=10^9)
輸出:輸出乙個字串,每個字元表示選取的機器編號。其中1表示機器1,2表示機器2。
分析過程:機器1只會生奇數個魔法幣,機器2生產偶數個魔法幣。假設當前魔法幣有i個,投入j個:如果投入機器1,則魔法幣數變為i+j+1;如果投入機器2,則變為i+j+2個。顯然,存在關係j<=i。
反過來思考,當前魔法幣個數為n的時候,則前一次魔法幣個數m=n-step。為了盡可能地減少兌換次數,顯然step越大越好,也就是優先選機器2,即step=j+2。
基於上述分析,計算方法如下:
步驟1 如果n是偶數,由於n = i+j + 2,則j最大為(n-2)/2,為了讓步長step最大,則可令j等於此最大值
步驟2. 如果n是奇數,則相當於在擁有n-1魔法幣的時候,投入0個幣到機器1的結果。此時再倒推計算n-1是怎麼選取的。進入步驟1
步驟3:當計算出來的i為零,即擁有魔法比個數為零,則逆推結束。
def getchoice(inputnum):
choice = ''
if inputnum %2 != 0:
choice = '1'+choice
inputnum -= 1
if inputnum <= 0 : return 0, choice
choice = '2'+choice
j = (inputnum - 2)/2
i = inputnum -2 - j
return i, choice
while(1):
print("pls input magic coin number, and input 0 when you want exit")
n = int(input())
if n == 0:break
choiceresult=''
while(n>0):
restnum,curresult=getchoice(n)
n = restnum
choiceresult = curresult + choiceresult
print("suggested choice is %s.\n" %(choiceresult))
********************= restart: d:\python\getmagiccoin.py ********************=
pls input magic coin number, and input 0 when you want exit
1suggested choice is 1.
pls input magic coin number, and input 0 when you want exit
2suggested choice is 2.
pls input magic coin number, and input 0 when you want exit
3suggested choice is 21.
pls input magic coin number, and input 0 when you want exit
10suggested choice is 122.
pls input magic coin number, and input 0 when you want exit
筆試 魔法幣問題
小易現在一枚魔法幣都沒有 魔法機器1 如果投入x個魔法幣,魔法機器會將其變為2x 1個魔法幣 魔法機器2 如果投入x個魔法幣,魔法機器會將其變為2x 2個魔法幣 小易採購魔法神器總共需要n個魔法幣,所以小易只能通過兩台魔法機器產生恰好n個魔法幣,小易需要你幫他設計乙個投入方案使他最後恰好擁有n個魔法...
網易刷題 魔法幣
小易準備去魔法王國採購魔法神器,購買魔法神器需要使用魔法幣,但是小易現在一枚魔法幣都沒有,但是小易有兩台魔法機器可以通過投入x x可以為0 個魔法幣產生更多的魔法幣。魔法機器1 如果投入x個魔法幣,魔法機器會將其變為2x 1個魔法幣 魔法機器2 如果投入x個魔法幣,魔法機器會將其變為2x 2個魔法幣...
網易筆試程式設計題 魔法幣
小易準備去魔法王國採購魔法神器,購買魔法神器需要使用魔法幣,但是小易現在一枚魔法幣都沒有,但是小易有兩台魔法機器可以通過投入x x可以為0 個魔法幣產生更多的魔法幣。魔法機器1 如果投入x個魔法幣,魔法機器會將其變為2x 1個魔法幣 魔法機器2 如果投入x個魔法幣,魔法機器會將其變為2x 2個魔法幣...