题目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 newRowand 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])]: 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 整数解