偶尔一道编程题锻炼思维
1.题目股神http://exercise.acmcoder.com/online/online_judge_ques?ques_id=1664&konwledgeId=134
观察规律发现减法的位置的规律,只要找到当前数前面有几个减法,可以求得输出。例如 14 - 3*2=8 (三个减号)
代码:
#!/usr/bin/env python
# coding=utf-8
while 1 :
x =int(raw_input())
if x>2:
sub = 1
count =3
for i in range(3,(x+1)):
count += i
if count <= x:
sub +=1
else:
out = x- sub*2
print(out)
break
else:
print(x)
这样做答案是对的但是内存限制超标了
代码:
#!/usr/bin/env python
# coding=utf-8
while 1 :
x =int(raw_input())
k = 3
n = 3
while x-k>=n:
n+=k
k+=1
if x<3:
print(x)
else:
print(int(x-(k-2)*2))
这里把for改成while,内存就降下来了。所以使用while比for要省内存要快。
2.题目翻转数组http://exercise.acmcoder.com/online/online_judge_ques?ques_id=1656&konwledgeId=134
这道题没有做出来!!!
n=int(raw_input())
a=[int(i) for i in raw_input().split()]
b=sorted(a)
c=[a[i] for i in range(n) if a[i]!=b[i]]
d=[b[i] for i in range(n) if a[i]!=b[i]]
c.reverse()
if c==d:
print("yes")
else:
print("no")
看了人家的代码分析下:先对输入的数进行一个排序,在原始的数组中和排序的数组中找到他们不相同的部分,看看反转后相等吗?相等yes,不相等 no,就是真简单可以没有想到。
1.列表推导式书写形式:
[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]
3.题目:约德尔测试http://exercise.acmcoder.com/online/online_judge_ques?ques_id=1677&konwledgeId=134
a = raw_input()
b = raw_input()
c = [ ]
for i in a:
if i.isalnum():
c.append(1)
else:
c.append(0)
b = list(b)
d = [b[i] for i in range(len(b)) if int(b[i])== int(c[i]) ]
percent = 100*float(len(d))/len(b)
print("%.2f%%" % percent)
学会怎么判断数字和字母用 .isalnum(),练习了上次学习到的列表推导式