題目id: 1 just print a+b
give you two var a and b, print the value of a+b, just do it!!
print a+b
題目id: 2 list排序
給你一個list L, 如 L=[2,8,3,50], 對L進行升序排序並輸出
print sorted(L)
題目id: 3 字串逆序
給你一個字串 a, 如a=‘12345’,對a進行逆序輸出a。
print a[::-1]
題目id:4 輸出字典key
給你一字典a,如a={1:1,2:2,3:3},輸出字典a的key,以','連結,如‘1,2,3'。
print ','.join(a.keys())
題目id: 5 輸出字元奇數位置的字串
給你一個字串 a, 輸出字元奇數位置的字串。如a=‘12345’,則輸出135。
str1='' for i in range(len(a)): if i%2==0: str1 += str(a[i]) print str1
題目id:6 求解100以內的所有素數
輸出100以內的所有素數,素數之間以一個空格區分
import math def isPrime(n): if n<=1: return False for i in range(2,int(math.sqrt(n))+1): if n%i == 0: return False return True list = [] for i in range(1,100): if isPrime(i): list.append(str(i)) print ' '.join(list)
題目id:7 求矩形面積
已知矩形長a,寬b,輸出其面積和周長,面積和周長以一個空格隔開
print "%d %d"%(a*b,2*(a+b))
題目id:8 求中位數
給你一個list L, 如 L=[0,1,2,3,4], 輸出L的中位數(若結果為小數,則保留一位小數)。
n = len(L) L.sort() //注意sorted()函式和sort()函式的區別,sorted()不影響L的結構,而sort()影響L的結構 print (L[n/2] if n&1 else round(float(L[n/2-1]+L[n/2])/2,1))
題目id:9 最大公約數
給你兩個正整數a和b, 輸出它們的最大公約數。
def gcd(a,b): if a < b: a,b = b,a while b: a,b=b,a%b return a print gcd(a,b)
題目id:10 最小公倍數
給你兩個正整數a和b, 輸出它們的最小公倍數
def gcd(a,b): if a < b: a,b = b,a while b: a,b=b,a%b return a print a*b/gcd(a,b)
題目id:11 結尾0的個數
給你一個正整數列表 L, 如 L=[2,8,3,50], 輸出L內所有數字的乘積末尾0的個數,
def getFactorNum(num,factor): cnt = 0 while num%factor == 0: cnt+=1 num /=factor return cnt fiveNum = 0 twoNum = 0 for num in L: fiveNum += getFactorNum(num,5) twoNum += getFactorNum(num,2) print min(fiveNum,twoNum)
題目id:12 結尾非零數的奇偶性
給你一個正整數列表 L, 如 L=[2,8,3,50], 判斷列表內所有數字乘積的最後一個非零數字的奇偶性,
def getFactorNum(num,factor): cnt = 0 while num%factor == 0: cnt+=1 num /=factor return cnt fiveNum = 0 twoNum = 0 for num in L: fiveNum += getFactorNum(num,5) twoNum += getFactorNum(num,2) print ( 1 if fiveNum >= twoNum else 0)
題目id:13 光棍的悲傷
給你一個整數a,數出a在二進位制表示下1的個數,並輸出。
cnt = 0 while a: cnt += a&1 a >>= 1 print cnt
題目id:14 Python之美
輸出Python之禪
注意:輸出python之禪的原始碼即可,不用轉換為英文。
import this print this.s
題目id:15 大小寫轉換
給定一個字串a, 將a中的大寫字母 轉換成小寫,其它字元不變,並輸出。
print a.lower()
題目id:16 人民幣金額列印
銀行在列印票據的時候,常常需要將阿拉伯數字表示的人民幣金額轉換為大寫表示,現在請你來完成這樣一個程式。
在中文大寫方式中,0到10以及100、1000、10000被依次表示為:
零壹貳叄肆伍陸柒捌玖拾佰仟萬
以下的例子示範了阿拉伯數字到人民幣大寫的轉換規則:
1 壹圓
11 壹拾壹圓
111 壹佰壹拾壹圓
101 壹佰零壹圓
-1000 負壹仟圓
1234567 壹佰貳拾叄萬肆仟伍佰陸拾柒圓
現在給你一個整數a(|a|<100000000), 列印出人民幣大寫表示
d={0:'零',1:'壹',2:'貳',3:'叄',4:'肆',5:'伍',6:'陸',7:'柒',8:'捌',9:'玖'} unit = {0:'',1:'拾',2:'佰',3:'仟',4:'萬'} b = abs(a) def transferMoney(b,s,outOfRange): s.append('萬') if outOfRange else s.append('圓') cnt = 0 flag = False if b == 0: s.append(d[0]) else: while b: if b%10: flag = True s.append(unit[cnt]) if flag: s.append(d[b%10]) b/=10 cnt+=1 s=[] transferMoney(b%10000,s,False) if b >= 10000: transferMoney(b/10000,s,True) if a < 0: s.append('負') print "".join(s[::-1])
題目id:17 公約數的個數
給你兩個正整數a,b, 輸出它們公約數的個數。
def gcd(a,b): if a < b: a,b = b,a while b: a,b = b,a%b return a cnt = 1 for i in range(1,gcd(a,b)): if a%i == 0 and b%i ==0: cnt +=1 print cnt
題目id:18 逆解最大公約數與最小公倍數
我們經常遇到的問題是給你兩個數,要你求最大公約數和最小公倍數。
今天我們反其道而行之,給你兩個數a和b,計算出它們分別是哪兩個數的最大公約數和最小公倍數。
輸出這兩個數,小的在前,大的在後,以空格隔開。若有多組解,輸出它們之和最小的那組。
import sys def gcd(a,b): if a < b: a,b = b,a while b: a,b = b,a%b return a c= b/a+1 minv,mina,minb= sys.maxint,0,0 for i in range(1,c): for j in range(i,c): if gcd(i,j) == 1 and a*i*j == b: if minv > (a*i+a*j): minv,mina,minb = (a*i+a*j),a*i,a*j print '%d %d'%(mina,minb)
題目id:19 單身情歌
抓不住愛情的我
總是眼睜睜看它溜走
...
現在來練習一下發現愛的能力,給你一個字串a,如果其中包含"LOVE"(love不區分大小寫)則輸出LOVE,否則輸出SINGLE。
print ("LOVE" if "love" in a.lower() else "SINGLE" )
題目id:20 資訊加密
給你個小寫英文字串a和一個非負數b(0<=b<26), 將a中的每個小寫字元替換成字母表中比它大b的字母。
這裡將字母表的z和a相連,如果超過了z就回到了a。例如a="cagy",b=3, 則輸出 fdjb
c=[] for letter in a: if letter.islower(): c.append(chr((ord(letter)+b-97)%26+97)) else: c.append(letter) print "".join(c)
題目id:21 迴文子串
給你一個字串a和一個正整數n,判斷a中是否存在長度為n的迴文子串。如果存在,則輸出YES,否則輸出NO。
迴文串的定義:記串str逆序之後的字串是str1,若str=str1,則稱str是迴文串,如"abcba".
def is_palindrome(a): return (True if a == a[::-1] else False) for index in range(len(a)-n+1): if is_palindrome(a[index:index+n]): print 'YES' break else: print 'NO'
題目id:22 時間就是金錢
給你兩個時間st和et(00:00:00<=st <= et<=23:59:59), 請你給出這兩個時間間隔的秒數。
如:st="00:00:00", et="00:00:10", 則輸出10.
stTime = st.split(':') etTime = et.split(':') hour,minute,second = int(etTime[0])-int(stTime[0]),int(etTime[1])-int(stTime[1]),int(etTime[2])-int(stTime[2]) print hour*3600+minute*60+second
題目id:23 365 Or 366?
一年有多少天,這是個大問題,很值得思考。現在給你一個年份year(year為四位數字的字串,如"2008","0012"),
你輸出這一年的天數。如year="2013", 則輸出365。
def isLeapYear(year): return (year%4 == 0 and year%100 )or year%400 == 0 print (366 if isLeapYear(int(year)) else 365)
題目id:24 一馬當先
下過象棋的人都知道,馬只能走'日'字形(包括旋轉90°的日),現在想象一下,給你一個n行m列網格棋盤,
棋盤的左下角有一匹馬,請你計算至少需要幾步可以將它移動到棋盤的右上角,若無法走到,則輸出-1.
如n=1,m=2,則至少需要1步;若n=1,m=3,則輸出-1
主要用深度優先搜尋演算法去做
n +=1 m +=1 visit = [([False]*n) for i in range(m)] step = ((2,1),(1,2),(-1,2),(-2,1),(-2,-1),(-1,-2),(1,-2),(2,-1)) flag = False cnt = 0 minCnt = n*m def dfs(row,col): global minCnt global cnt global flag global step global visit if row == m-1 and col == n-1: flag = True if minCnt > cnt: minCnt = cnt return for item in step: newRow,newCol= row+item[0],col+item[1] if newRow>=0 and newRow<m and newCol>=0 and newCol < n: if visit[newRow][newCol] == False: visit[newRow][newCol] =True cnt +=1 dfs(newRow,newCol) cnt -=1 visit[newRow][newCol] =False visit[0][0] =True dfs(0,0) print (minCnt if flag else -1)
題目id:25 格式化時間
給你一個時間t(t是一個字典,共有六個字串key(year,month,day,hour,minute,second),值為每個值為數字組成的字串,
如t={'year':'2013','month':'9','day':'30','hour':'16','minute':'45','second':'2'}
請將其按照以下格式輸出, 格式:XXXX-XX-XX XX:XX:XX。如上例應該輸出: 2013-09-30 16:45:02。
d =[t['year'].zfill(4),t['month'].zfill(2),t['day'].zfill(2),t['hour'].zfill(2),t['minute'].zfill(2),t['second'].zfill(2)] print '-'.join(d[:3]),':'.join(d[3:])
題目id:26 序列判斷
給你一個整陣列成的列表L,按照下列條件輸出:
若L是升序排列的,則輸出"UP";
若L是降序排列的,則輸出"DOWN";
若L無序,則輸出"WRONG"。
if L == sorted(L): print 'UP' elif L == sorted(L,reverse=True): print 'DOWN' else: print 'WRONG'
題目id:27 加油站
每個加油站加油都有一個上限,儲存在列表limit中,即limit[i]為第i個加油站加油的上限,
而從第i個加油站開車開到第(i+1)%n個加油站需要cost[i]升油,cost為一個列表。
現在有一輛開始時沒有油的車,要從一個加油站出發繞這個公路跑一圈回到起點。
給你整數n,列表limit和列表cost,你來判斷能否完成任務。
如果能夠完成任務,輸出起始的加油站編號,如果有多個,輸出編號最小的。
如果不能完成任務,輸出-1。
for i in range(n): sumLimit,sumCost = 0,0 for k in range(n): sumLimit +=limit[(k+i)%n] sumCost += cost[(k+i)%n] if sumCost > sumLimit: break else: print i break else: print -1
題目id:28 相同數字
給你一個整數列表L,判斷L中是否存在相同的數字,
若存在,輸出YES,否則輸出NO。
print ('NO' if len(set(L)) == len(L) else 'YES')
題目id:29 判斷三角形
給你三個整數a,b,c, 判斷能否以它們為三個邊長構成三角形。
若能,輸出YES,否則輸出NO。
d=[a,b,c] d.sort() if d[0]+d[1]>d[2] and abs(d[0]-d[1])<d[2]: print 'YES' else: print 'NO'
題目id:30 National Day
馬上國慶節了,用一個英文單詞描述你此時此刻的心情。
print 'Happy'
題目id:31 山峰的個數
十一假期,小P出去爬山,爬山的過程中每隔10米他都會記錄當前點的海拔高度(以一個浮點數表示),
這些值序列儲存在一個由浮點陣列成的列表h中。回到家中,小P想研究一下自己經過了幾個山峰,請你幫他計算一下,輸出結果。
例如:h=[0.9,1.2,1.22,1.1,1.6,0.99], 將這些高度順序連線,會發現有兩個山峰,故輸出一個2(序列兩端不算山峰)
cnt = 0 for i in xrange(1,len(h)-1): if h[i]>h[i-1] and h[i]>h[i+1]: cnt += 1 print cnt
題目id:32 三角形形狀
給以一個三角形的三邊長a,b和c(邊長是浮點數),請你判斷三角形的形狀。
若是銳角三角形,輸出R,
若是直角三角形,輸出Z,
若是鈍角三角形,輸出D,
若三邊長不能構成三角形,輸出W.
d=[a,b,c] d.sort() if d[0]+d[1] > d[2] and abs(d[0]-d[1]) < d[2]: if d[0]**2+d[1]**2 == d[2]**2: print 'Z' elif d[0]**2+d[1]**2 >d[2]**2: print 'R' else: print 'D' else: print 'W'
題目id:33 大冪次運算
給你兩個正整數a(0 < a < 100000)和n(0 <= n <=100000000000),計算(a^n) % 20132013並輸出結果
print pow(a,n,20132013)
題目id:34 密碼生成
生活在當代社會,我們要記住很多密碼,銀行卡,qq,人人,微博,郵箱等等。小P經過一番思索之後,發明了下面這種生成密碼方法:
給定兩個正整數a和b, 利用a / b我們會到的一個長度無限的小數(若a / b不是無限小數,
比如1/2=0.5,我們認為0.5是0.5000000...,同樣將其看做無限長的小數),小P將該小數點後第x位到第y位的數字
當做密碼,這樣,無論密碼有多長,小P只要記住a,b,x,y四個數字就可以了,牢記密碼再也不是那麼困難的事情了。
現在告訴你a,b,x,y(0 < a,b <= 20132013, 0 < x <= y < 100000000000),請你輸出密碼。
例如:a = 1, b = 2, x = 1, y = 4, 則 a / b = 0.5000000..., 輸出小數點後第1到4位數字,即5000
decimals = [] if a > b : a =a%b cnt = 0 flag = False x-=1 y-=1 while cnt <= y: decimalPart,a = divmod(a*10**1024,b) if flag: decimals.append(str(decimalPart).zfill(1024)) if x >= cnt and x < cnt+1024: flag = True decimals.append((str(decimalPart).zfill(1024))[x-cnt:]) if y>=cnt and y< cnt+1024: break cnt +=1024 if y/1024 !=x/1024: decimals[-1]=(str(decimals[-1]))[:y-cnt+1] else: decimals[-1]=(str(decimals[-1]))[:y-x+1] print ''.join(decimals)
題目id:35 最大連續子序列
給你一個整數list L, 如 L=[2,-3,3,50], 求L的一個連續子序列,使其和最大,輸出最大子序列的和。
例如,對於L=[2,-3,3,50], 輸出53(分析:很明顯,該列表最大連續子序列為[3,50]).
def maxSubSum(L): maxSum,thisSum= 0,0 for item in L: thisSum += item; if thisSum > maxSum: maxSum = thisSum elif thisSum < 0: thisSum = 0 return maxSum print maxSubSum(L)
題目id:36 最大非連續子序列
給你一個整數list L, 如 L=[2,-3,3,50], 求L的一個非連續子序列,使其和最大,輸出最大子序列的和。
這裡非連續子序列的定義是,子序列中任意相鄰的兩個數在原序列裡都不相鄰。
例如,對於L=[2,-3,3,50], 輸出52(分析:很明顯,該列表最大非連續子序列為[2,50]).
注意類似這種情況L=[-1,-1,-1,-1,-1,0]
if len(L) >= 2: dp=[L[0],max(L[0],L[1])] for i in range(2,len(L)): dp.append(max(dp[i-1],max(L[i]+dp[i-2],L[i]))) print dp[len(L)-1] else: print L[0]
題目id:37 簡單題之勾股定理
給你直角三角形的兩個直角邊的邊長a,b,請你求出其斜邊邊長,結果保留小數點後三位小數。
如a=3, b =4, 則輸出5.000。
import math print "%.3f"%math.sqrt(a**2+b**2)
題目id:38 簡單題之列表轉換
給你一個字串列表L,請用一行程式碼將列表所有元素拼接成一個字串並輸出。
如L=['abc','d','efg'], 則輸出abcdefg。
print ''.join(L)
題目id:39 簡單題之輸出格式練習
給你一個字串列表L,用一行程式碼順序輸出L中的元素,元素之間以一個空格隔開,注意行尾不要有空格,輸出單獨佔一行。
如L=['abc','d','efg'], 則輸出abc d efg。
print ' '.join(L)
題目id:40 整數解
給你兩個整數a和b(-10000<a,b<10000),請你判斷是否存在兩個整數,他們的和為a,乘積為b。
若存在,輸出Yes,否則輸出No
例如:a=9,b=15, 此時不存在兩個整數滿足上述條件,所以應該輸出No。
import math x1 = int(float(a+math.sqrt(a**2-4*b))/2) x2 = int(float(a-math.sqrt(a**2-4*b))/2) if x1+x2 == a and x1*x2 == b: print 'Yes' else: print 'No'
題目id:41 Py數
Py從小喜歡奇特的東西,而且天生對數字特別敏感,一次偶然的機會,他發現了一個有趣的四位數2992,
這個數,它的十進位制數表示,其四位數字之和為2+9+9+2=22,它的十六進位制數BB0,其四位數字之和也為22,
同時它的十二進位制數表示1894,其四位數字之和也為22,啊哈,真是巧啊。
Py非常喜歡這種四位數,由於他的發現,所以這裡我們命名其為Py數。
現在給你一個十進位制4位數n,你來判斷n是不是Py數,若是,則輸出Yes,否則輸出No。
如n=2992,則輸出Yes; n = 9999,則輸出No。
def getSumByValue(n,value): res = 0 while n: res += n%value n /=value return res if getSumByValue(n,10) == getSumByValue(n,16) == getSumByValue(n,12): print 'Yes' else: print 'No'
題目id:42 分拆素數和
把一個偶數拆成兩個不同素數的和,有幾種拆法呢?
現在來考慮考慮這個問題,給你一個不超過10000的正的偶數n,
計算將該數拆成兩個不同的素數之和的方法數,並輸出。
如n=10,可以拆成3+7,只有這一種方法,因此輸出1.
import math def is_prime(num): for i in range(2,int(math.sqrt(num)+1)): if num%i == 0: return False return True cnt = 0 for i in range(2,n/2): #注意1不是素數 if is_prime(i) and is_prime(n-i): cnt +=1 print cnt
題目id:43 斐波那契數列
斐波那契數列為1,1,2,3,5,8...。數列從第三項起滿足,該項的數是其前面兩個數之和。
現在給你一個正整數n(n < 10000), 請你求出第n個斐波那契數取模20132013的值(斐波那契數列的編號從1開始)。
a,b=1,1 for i in range(3,n+1): a,b=b%20132013,(a+b)%20132013 print b
題目id:44 超級樓梯
有一樓梯共n級,剛開始時你在第一級,若每次只能跨上一級或二級,要走上第n級,共有多少種走法?
現在給你一個正整數n(0<n<40),請你輸出不同的走法數。
如n=2,則輸出1(你只有一種走法,走一步,從第一級到第二級)
a,b=1,1 for i in range(3,n+1): a,b=b,(a+b) print b
題目id:45 砝碼問題
有一組砝碼,重量互不相等,分別為m1、m2、m3……mn;它們可取的最大數量分別為x1、x2、x3……xn。
現要用這些砝碼去稱物體的重量,問能稱出多少種不同的重量。
現在給你兩個正整數列表w和n, 列表w中的第i個元素w[i]表示第i個砝碼的重量,列表n的第
i個元素n[i]表示砝碼i的最大數量。i從0開始,請你輸出不同重量的種數。
如:w=[1,2], n=[2,1], 則輸出5(分析:共有五種重量:0,1,2,3,4)
母函式的問題
m = set() for i in range(n[0]+1): m.add(w[0]*i) for i in range(1,len(n)): tmp = m.copy() m.clear() for j in range(n[i]+1): for k in tmp: m.add(w[i]*j+k) print len(m)
題目id:45 測試貢獻題目
給你一個list L, 如 L=[2,8,3,50], 對L進行降序排序並輸出, 如樣例L的結果為[50,8,3,2]
print sorted(L,reverse = True)
題目id:46 取石子游戲
有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法, 一是可以在任意的一堆中取走任意多的石子;二是可以在兩堆中同時取走相同數量的石子。最後把石子全部取完者為勝者。 現在給出初始的兩堆石子的數目a和b,如果輪到你先取,假設雙方都採取最好的策略,問最後你是勝者還是敗者。 如果你是勝者,輸出Win,否則輸出Loose。 例如,a=3,b=1, 則輸出Win(你先在a中取一個,此時a=2,b=1,此時無論對方怎麼取,你都能將所有石子都拿走).
博弈論問題
import math p = (math.sqrt(float(5))+1)/float(2) c = abs(a-b) if a > b: a = b if a == int(p*c): print "Loose" else: print "Win"
題目id:47 楊輝三角
還記得中學時候學過的楊輝三角嗎?具體的定義這裡不再描述,你可以參考以下的圖形: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 .............. 先在給你一個正整數n,請你輸出楊輝三角的前n層 注意:層數從1開始計數,每層數字之間用一個空格隔開,行尾不要有空格。 如n=2,則輸出: 1 1 1
trangle = [['1'],['1','1']] def print_trangle(n): for i in range(n): print ' '.join(trangle[i]) for i in range(3,n+1): tmp=['1'] newRow= trangle[i-2] for j in range(len(newRow)-1): tmp.append(str(int(newRow[j])+int(newRow[j+1]))) tmp.append('1') trangle.append(tmp) print_trangle(n)
題目id:48 砝碼問題II
有一組砝碼,重量互不相等,分別為m1、m2、m3……mn;每種砝碼的數量有無限個。 現要用這些砝碼去稱物體的重量,給你一個重量n,請你判斷有給定的砝碼能否稱出重量n。 現在給你一個正整數列表w和一個正整數n,列表w中的第i個元素w[i]表示第i種砝碼的重量, n表示要你判斷的重量。如果給定砝碼能稱出重量n,輸出Yes,否則輸出No。 例如,w=[2,5,11], n=9,則輸出Yes(取兩個2,一個5)。
此類問題用母函式做比較簡單
def solve(): num=[] for i in range(len(w)): num.append(n/w[i]) m = set() for i in range(num[0]+1): m.add(w[0]*i) for i in range(1,len(num)): tmp = m.copy() m.clear() for j in range(num[i]+1): for k in tmp: if w[i]*j+k < n: m.add(w[i]*j+k) elif w[i]*j+k == n: return "Yes" return "No" print solve()
題目id:49 進位制轉換
給你一個十進位制數a,將它轉換成b進位制數,如果b>10,用大寫字母表示(10用A表示,等等) a為32位整數,2 <= b <= 16 如a=3,b = 2, 則輸出11
不要忘記a為負數的情況
base = ('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F') def transfer(a,b): res = [] aa = abs(a) while aa: res.append(base[aa%b]) aa/=b if a<0: res.append('-') return ''.join(res[::-1]) print transfer(a,b)
題目id:50 Py扔鉛球
Py不但是程式設計大牛,而且是運動健將。比如說扔鉛球,1000m,現在Py參加校園扔鉛球比賽, 給你Py的身高a(雙精度數),球落地點與Py頭部的連線與水平線的夾角 b(弧度), 要你編寫一個程式計算Py扔鉛球的水平距離。 a,b都是浮點數,注意b是弧度,其中, 140 < a < 200, 0 < b < 1.5. 輸出你求出的水平距離,保留到小數點後三位。 如,a = 165.5, b=1.1, 則輸出84.234
import math print "%.3f" % (a/math.tan(b))
題目id:53 神の安♂排
記得有一次全班去唱K, 其中有個活動是情歌對唱. 具體操作流程是這樣的: 準備好 21 個鬮(我們班 15 男 6 女), 其中只有兩個是有標記的, 每人隨意抓取一個, 最後取到有標記的鬮的兩個人去點首情歌對唱. 旁邊一哥們兒幽幽地對我說, 看來攪基真是神的安排啊, 你看我們班的男女人數, 攪基的機率 C(15,2)/C(21,2) 剛好是 1/2. 給跪了, 這哥們兒對數字太敏感了, 簡直是拉馬努金轉世啊. 不過我隨之想到一個問題: (21, 15) 真的是神的唯一安排嗎? 其實不是的, 神還有很多類似的安排. 比如 (4, 3), 顯然 C(4,2)/C(3,2) 也等於 1/2, 當然還有 (120, 85) 等等等等. 神的安排太多太多了, 如果我們定義 (n, m) 是一個安排(其中 1 < m < n), 而如果 C(m,2)/C(n,2) = 1/2, 它就是神的安排. 現在的問題是, 給你一個不大於 10^9 的正整數 N, 有多少組神的安排 (n, m) 滿足 n <= N 呢?
具體參考 關於求解不定方程的n(n-1)=2m(m-1)的解法的總結
cnt = 0 x,y=1,1 while x<= 2*N-1: x,y=3*x+4*y,2*x+3*y if x > 2*N-1: break if x%2 and y%2: cnt +=1 print cnt
題目id:57 那些年我們集過的卡片
不知道大家的童年有沒有過和我相似的經歷。我記得小時候經常買乾脆面,不為別的,只是因為裡面有一張人物卡片。 其實有很多這樣的活動都有一個相同的模式:N 種人物卡片,每次買一包乾脆面隨機得到一張。當你集齊這 N 種人物時,就會有相應的獎勵。 那時候還不懂怎麼計算概率,白白給人家送了好多錢,吃了好多幹脆面。 現在的任務是,給你一個正整數 N (1 <= N <= 10^4),請你幫我從期望的角度計算平均需要買多少包乾脆面才能集齊這 N 種人物。 提醒:由於結果可能不是整數,所以結果只保留到小數點後兩位。
ans = 0 for i in range(N,0,-1): ans+=N*1.0/i print "%.2f" % ans