標籤:自己 and == break turn 過程 1.0 code int
題目:
果園裡有一堆蘋果,一共n頭(n大於1小於9)熊來分,第一頭為小東,它把蘋果均分n份後,多出了一個,它扔掉了這一個,拿走了自己的一份蘋果,接著第二頭熊重複這一過程,即先均分n份,扔掉一個然後拿走一份,以此類推直到最後一頭熊都是這樣(最後一頭熊扔掉後可以拿走0個,也算是n份均分)。問最初這堆蘋果最少有多少個。
給定一個整數n,表示熊的個數,返回最初的蘋果數。保證有解。
測試範例:
2
返回:
3
def one_pear_operation(m, i, n): ### 第i+1熊分蘋果之前的蘋果數量
### m為第i只熊分蘋果之前的蘋果數目
### n為熊的總數目 p=float(m*n)/(n-1)+1 t=float(p-1)/n if (not t.is_integer()) and i>0 : ### 每隻熊都應該拿走整數個蘋果,並且只有最後一隻熊被允許拿走0個蘋果扔掉一個蘋果,剩餘0個蘋果 return 1.1 else: return pdef processing(n, p):
### 從最後一隻熊反向推算,如果假設的最後一隻熊拿蘋果之前的蘋果數量不符合要求就遞增1,知道滿足條件為止 s=p flag=1 for i in range(n-1): s=one_pear_operation(s,i,n) if not s.is_integer(): flag=0 break return s, flag def main(n):
### 最後一隻熊分蘋果之前最少還有1個蘋果 p=1.0 while(True): s=p s, flag=processing(n,s) if flag==1 and s>2: print int(s) break else: while(True): p +=1 temp=float(p-1)/n if temp.is_integer(): break if __name__==‘__main__‘: #processing(6,1) main(3) #print s
試題2---分蘋果