一马当先
讨论此题 | 解题报告
顶(37) (AC/Submit)Ratio(461|1769)26.06% 踩(1)
下过象棋的人都知道,马只能走'日'字形(包括旋转90°的日),现在想象一下,给你一个n行m列网格棋盘, 棋盘的左下角有一匹马,请你计算至少需要几步可以将它移动到棋盘的右上角,若无法走到,则输出-1. 如n=1,m=2,则至少需要1步;若n=1,m=3,则输出-1。
m=6
n=n+1
m=m+1
cnt = 1
dir = [[-1,2],[1,2],[-2,1],[2,1],[-2,-1],[2,-1],[-1,-2],[1,-2]]
map = [[0]*(m) for x in range(0,n)]
flag =[[0]*(m) for x in range(0,n)]
success = 0
step = [[0,0,0]]
flag[0][0] = 1
while len(step)>0 and success==0:
temp = step.pop()
for i in range(0,8):
ex = temp[0] + dir[i][0]
ey = temp[1] + dir[i][1]
if ex>=0 and ex=0 and ey
讨论此题 | 解题报告
顶(5) (AC/Submit)Ratio(734|1830)40.11% 踩(5)
给你一个时间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。
res=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 res
序列判断
讨论此题 | 解题报告
顶(7) (AC/Submit)Ratio(855|2432)35.16% 踩(9)
给你一个整数组成的列表L,按照下列条件输出: 若L是升序排列的,则输出"UP"; 若L是降序排列的,则输出"DOWN"; 若L无序,则输出"WRONG"。
UP = L[:]
UP.sort()
DOWN = UP[:]
DOWN.reverse()
if L==UP:
print 'UP'
elif L==DOWN:
print 'DOWN'
else:
print 'WRONG'
相同数字
讨论此题 | 解题报告
顶(6) (AC/Submit)Ratio(894|2346)38.11% 踩(0)
给你一个整数列表L,判断L中是否存在相同的数字, 若存在,输出YES,否则输出NO。
import math
x = set(L)
if len(L)==len(x):
print 'NO'
else:
print 'YES'
加油站
讨论此题 | 解题报告
顶(11) (AC/Submit)Ratio(443|1469)30.16% 踩(2)
一个环形的公路上有n个加油站,编号为0,1,2,...n-1, 每个加油站加油都有一个上限,保存在列表limit中,即limit[i]为第i个加油站加油的上限, 而从第i个加油站开车开到第(i+1)%n个加油站需要cost[i]升油,cost为一个列表。 现在有一辆开始时没有油的车,要从一个加油站出发绕这个公路跑一圈回到起点。 给你整数n,列表limit和列表cost,你来判断能否完成任务。 如果能够完成任务,输出起始的加油站编号,如果有多个,输出编号最小的。 如果不能完成任务,输出-1。
n=8
limit =[ 0,2,3,4,5,6,7,8]
cost=[1,2,3,4,5,6,7,8]
res=[]
for i in range(0,n):
sum=0
x=i
flag=0
for j in range(x,x+n):
sum=sum+limit[j%n]-cost[j%n] #每次会有剩余的累加
if sum<0:
flag=1
break
if flag==0:
res.append(i)
res.sort()
if len(res)==0:
print '-1'
else:
print res[0]
山峰的个数
讨论此题 | 解题报告
顶(7) (AC/Submit)Ratio(662|1685)39.29% 踩(2)
十一假期,小P出去爬山,爬山的过程中每隔10米他都会记录当前点的海拔高度(以一个浮点数表示), 这些值序列保存在一个由浮点数组成的列表h中。回到家中,小P想研究一下自己经过了几个山峰,请你帮他计算一下,输出结果。 例如:h=[0.9,1.2,1.22,1.1,1.6,0.99], 将这些高度顺序连线,会发现有两个山峰,故输出一个2(序列两端不算山峰)
h=[0.9,1.2,1.22,1.1,1.6,0.99]
sum=0
for i in range(1,len(h)-1):
if(h[i]>h[i-1] and h[i]>h[i+1]):
sum = sum +1
print sum
大幂次运算
讨论此题 | 解题报告
顶(6) (AC/Submit)Ratio(574|1929)29.76% 踩(4)
给你两个正整数a(0 < a < 100000)和n(0 <= n <=100000000000),计算(a^n) % 20132013并输出结果
import math
print pow(a,n,20132013)
密码生成
讨论此题 | 解题报告
顶(9) (AC/Submit)Ratio(196|2297)8.53% 踩(10)
生活在当代社会,我们要记住很多密码,银行卡,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
def divide(a,b,c,d):
result=""
a=(a*pow(10,c-1,b))%b #小数点后一位的被除数
for i in range(0,d-c+1):
a=(a%b)*10
result=result+str(a/b)
return result
print divide(a,b,x,y)
最大连续子序列
讨论此题 | 解题报告
顶(4) (AC/Submit)Ratio(513|1384)37.07% 踩(3)
给你一个整数list L, 如 L=[2,-3,3,50], 求L的一个连续子序列,使其和最大,输出最大子序列的和。 例如,对于L=[2,-3,3,50], 输出53(分析:很明显,该列表最大连续子序列为[3,50]).
now=0
sum=0
t=0
for x in L:
if x<0:
t+=1
now+=x
if now>sum:
sum=now
if now<0:
now=0
if t==len(L):
L.sort()
print L[0]
else:
print sum
最大非连续子序列
讨论此题 | 解题报告
顶(7) (AC/Submit)Ratio(328|806)40.69% 踩(3)
给你一个整数list L, 如 L=[2,-3,3,50], 求L的一个非连续子序列,使其和最大,输出最大子序列的和。 这里非连续子序列的定义是,子序列中任意相邻的两个数在原序列里都不相邻。 例如,对于L=[2,-3,3,50], 输出52(分析:很明显,该列表最大非连续子序列为[2,50]).
def GNC(l): #最大非连续子序列
if len(L)<=2:
return max(L)
now=max(L[0],0)
print now
for i in range(2,len(L)):
L[i]+=now
now=max(now,L[i-1])#比较后一个和后两个的最大值
return max(L)
print GNC(L)
简单题之勾股定理
讨论此题 | 解题报告
顶(0) (AC/Submit)Ratio(559|1235)45.26% 踩(3)
给你直角三角形的两个直角边的边长a,b,请你求出其斜边边长,结果保留小数点后三位小数。 如a=3, b =4, 则输出5.000。
import math
c=math.sqrt(a*a+b*b)
print("{:.3f}".format(c))
简单题之列表转换
讨论此题 | 解题报告
顶(2) (AC/Submit)Ratio(617|877)70.35% 踩(0)
给你一个字符串列表L,请用一行代码将列表所有元素拼接成一个字符串并输出。 如L=['abc','d','efg'], 则输出abcdefg。
res=""
for x in L:
res+=x
print res
简单题之输出格式练习
讨论此题 | 解题报告
顶(1) (AC/Submit)Ratio(593|920)64.46% 踩(0)
给你一个字符串列表L,用一行代码顺序输出L中的元素,元素之间以一个空格隔开,注意行尾不要有空格,输出单独占一行。 如L=['abc','d','efg'], 则输出abc d efg。
for x in range(0,len(L)):
if x
Py数
讨论此题 | 解题报告
顶(2) (AC/Submit)Ratio(356|689)51.67% 踩(8)
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 Xbin(n,x):
sum = 0,
而n> 0:
sum + = n%x
n / = x
返回和
a = Xbin(n,10)
b = Xbin(n,16)
c = Xbin(n, )
如果一个== b和b == c:
print“Yes”
else:
print“No”
分拆素数和
讨论此题 | 解题报告
顶(1) (AC/Submit)Ratio(367|1107)33.15% 踩(0)
把一个偶数拆成两个不同素数的和,有几种拆法呢? 现在来考虑考虑这个问题,给你一个不超过10000的正的偶数n, 计算将该数拆成两个不同的素数之和的方法数,并输出。 如n=10,可以拆成3+7,只有这一种方法,因此输出1.
f = lambda x: all([x%c!=0 for c in range(2,x)])
p = [x for x in range(2,n) if f(x)]
sum=0
for x in range(0,len(p)):
for y in range(x,len(p)):
if p[x]+p[y]==n and p[x]!=p[y]:
sum+=1
print sum
取石子游戏
讨论此题 | 解题报告
顶(5) (AC/Submit)Ratio(162|507)31.95% 踩(2)
有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法, 一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。 现在给出初始的两堆石子的数目a和b,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。 如果你是胜者,输出Win,否则输出Loose。 例如,a=3,b=1, 则输出Win(你先在a中取一个,此时a=2,b=1,此时无论对方怎么取,你都能将所有石子都拿走).
import math
if a
最小公倍数I
讨论此题 | 解题报告
顶(1) (AC/Submit)Ratio(169|358)47.21% 踩(0)
给你一个正整数list L, 如 L=[2,8,3,50], 求列表中所有数的最小公倍数(不用考虑溢出问题)。 如L=[3,5,10], 则输出30
def gdy(n,m):
if n
特殊回文数
讨论此题 | 解题报告
顶(1) (AC/Submit)Ratio(15|60)25.00% 踩(1)
123321是一个非常特殊的数,它从左边读和从右边读是一样的。 给你一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n(1<=n<=54)。 按从小到大的顺序输出满足条件的整数,每个整数占一行,例如: n = 52, 则输出: 899998 989989 998899
a=[]
n=52
for x in range(1,10):
for y in range(10):
for z in range(10):
if x*2+y*2+z==n:
a.append(x*10001+y*1010+z*100)
if x*2+y*2+z*2==n:
a.append(x*100001+y*10010+z*1100)
a.sort()
for i in a:
print i