用魔法幣機器生產N個魔法幣的問題

2021-08-20 15:00:39 字數 1813 閱讀 1192



機器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個魔法幣...