牛客网输入
- 输入
sys.stdin.readline().split()
- 输出
print()
输入:
1.一行中两个或三个整数。
import sys
n, m = map(int, sys.stdin.readline().strip().split())
或:
a,b,c=[int(i) for i in input().split()]
2.一行整数输出为1个列表:
n = [int(i) for i in input().split()]
3.读入字符串
chars = sys.stdin.readline()
输出:
1.把列表[1,2,3]输出成1 2 3
print (" ".join(map(str, nums)))
2.把[[1,2,3],[2,3,4]]输出为:
1 2 3
2 3 4
for i in range(n):
print(" ".join(map(str,matrix[i])))
4.多行输入: 先获取第一行,再把剩余行合在一个列表中:
1 5 6
1
3
a,b,c=[int(i) for i in input().split()]
list=[]
for i in range(hangshu):
list.append([int(i) for i in input().split()])
print(list)
a,b,c=[int(i) for i in input().split()]
list=[]
for i in range(hangshu):
list.extend([int(i) for i in input().split()])
print(list)
-
append:
-
extend:
-
多行输入:行数固定且第一行给出,各行独立获取:
import sys
lines = sys.stdin.readlines()
n = int(lines[0])
x1 = list(map(int, lines[1].split()))
x2 = list(map(int, lines[2].split()))
x3 = list(map(int, lines[3].split()))
print(n,x1,x2,x3)
输入:
3
1 5 6
1
8
输出:
- 第一行读取为int型
- 其余行读取为list类型
- 常用字符串、列表操作
字符串:
.strip() 去除首位空格
.split() 分割
.strip().strip(‘-a’)去除首位空格和字符‘-a’
.replace(‘a’,’b’) 替换字符
S[:3]、S[5:] 、S[5:7](前3、第5之后、5到7)拼接字符串,去除某个字符
.index(str,beg,end) 返回开始索引或异常
.find(str,beg,end) 返回开始索引或-1
列表:
.remove(具体内容)
.pop(索引号)
del a[索引号]
赛码网
建议使用input()输入。使用sys.stdin.readline()默认会带换行符,所以要strip(’\n’)进行截取,使用sys.stdout.write(res)标准输出。
'''
输入:
5
(1,2)(5,3)(4,6)(7,5)(9,0)
output:
(4 6)(7 5)(9 0)
'''
nums = int(input())
points = []
for i in range(0, nums):
read_list = list(map(int, input().split()))
# read_list = [int(i) for i in input().split()]
points.append((read_list[0], read_list[1]))
for i in points:
print(i[0], i[1])
note:
输出要注意,按行遍历输出,而不是输出一个list或者tuple
读取一个处理(输出)一个,全部读进来之后处理在全部输出就是0。
赛码网线下测试没问题,线上测试一直AC为0,折腾了半天。发现原来是因为写代码时带了一行中文注释。
赛码网 :https://exercise.acmcoder.com/online/online_judge_list_all
1.股神:
观察当前数前有几个减号。如 14-3*2=8 (三个)
while 1:
x =int(input())
k = 3
n = 3
while x-k>=n:
n+=k
k+=1
if x<3:
print(x)
else:
print((x-(k-2)*2))
2.翻转数组
先对输入的数进行一个排序,在原始的数组中和排序的数组中找到他们不相同的部分,看看反转后相等吗。
1.列表推导式书写形式:
[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]
n=int(input())
a=[int(i) for i in 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")
3.约德尔测试
学会怎么判断数字和字母用 .isalnum(),练习了上次学习到的列表推导式。isdigit(),isalpha()
a = input()
b = input()
c = [ ]
for char in a:
if char.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) # %.2f是将该浮点数float保留2位小数。%%:。第一个%起到转义的作用,第二个%输出百分号%。
4.路灯
a = [int(i) for i in raw_input().split()]
b = [int(i) for i in raw_input().split()]
b = sorted(b)
c = [b[i+1] - b[i] for i in range(len(b)-1)]
d = max(c)
d = max([d/2.0, b[0], a[1]-b[-1]]) # 后两个数是考虑第一个路灯和最后一个路灯
print '%.2f' % d # 输出2.50
5.计算器的新功能
def factorList(n):
i = 2
flist = []
while(i*i <= n):
while(n%i==0):
flist.append(i)
n /= i
i += 1
if(n!=1):
flist.append(n)
return flist
def list2char(flist):
charList = []
for i in xrange(len(flist)):
for c in str(flist[i]):
charList.append(int(c))
if i<(len(flist)-1):
charList.append('*')
return charList
def printRes(clist):
row1 = [" - "," "," - "," - "," "," - "," - "," - "," - "," - "," "]
row2 = ["| |"," |"," |"," |","| |","| ","| "," |","| |","| |"," "]
row3 = [" "," "," - "," - "," - "," - "," - "," "," - "," - ","*"]
row4 = ["| |"," |","| "," |"," |"," |","| |"," |","| |"," |"," "]
row5 = [" - "," "," - "," - "," "," - "," - "," "," - "," - "," "]
chars = [row1,row2,row3,row4,row5]
for i in range(5):
out = []
for n in clist:
if n == "*":
out.append(chars[i][10])
else:
out.append(chars[i][n])
print "".join(out)
while True:
arr = int(raw_input())
flist = factorList(arr)
# print "arr = ",flist
charList = list2char(flist)
# print "charList = ",charList
printRes(charList)
6.公交车乘客
n = int(raw_input())
people = []
number = 0
for i in range(n):
u_d = [int(i) for i in raw_input().split(' ')]
number = number - u_d[0] + u_d[1]
people.append(number)
print max(people)
假设当第k个熊取完之后还有M个苹果,按照题目的意思,M除以N的余数恰好是1,那么第k+1只熊可以拿到(M-1)/N个苹果,第k只熊取之前有MN/(N-1)+1个苹果。换句话说,这堆苹果满足一个性质,对于每一只熊,取之前取之后的苹果数除以N都余1,取之后的苹果数整除(N-1)。
这样考虑的话,我们可以从最后一只熊开始向前倒推总的苹果数num,最后一只熊取走了N份苹果中的1份,所以剩下的苹果一定为N-1的倍数,所以num初始值一定为N-1的倍数。
把num初值为 N-1之后,开始倒推,上一只熊取之前的苹果数为num = num + num/(N-1)+1,再判断这个数字能否被N-1整除,若可以,继续向前倒推,若不能,说明num不满足条件,将num初值更新为2(N - 1),重复上述过程,若num不满足条件,再设置为3*(N-1),依次类推,直到循环中的num都能被N-1整除,这时候的num为满足条件的最小值,可能说的不是很清楚,直接看代码
n=input()
j=1
num=n-1
i=0
while(i<n):
if num%(n-1)!=0:
i=0
j=j+1
num=(n-1)*j
else:
i=i+1
num=num+1+num/(n-1)
print(num)
8.马路上的路灯
l,n=raw_input().split()
a=[1 for i in range(int(l))]
for j in range(int(n)):
st,en=raw_input().split()
for k in range(int(st),int(en)+1):
a[k-1]=0
print a.count(1)+1
9.日期倒计时
strptime()函数根据指定的格式把一个时间字符串解析为时间元组。
%Y 四位数的年份表示(000-9999),%m 月份(01-12),%d 月内中的一天(0-31)
import datetime
d1 = datetime.datetime.strptime(raw_input(), '%Y-%m-%d')
now = datetime.datetime(2015, 10, 18)
print (d1-now).days
10.比大小
假如,给出的第一位是b(给出的这个字符串简称str),那么所有以a开头的字符串都会排在str前面。以a开头的字符串的数量是多少呢?就是后面11位字符所有的排列组合,也就是11的阶乘。如果第一位是c,那么所有以a或者b开头的所有字符串就会排在str的前面,也就是 2*11! (注意后面是11的阶乘,不是11),依次类推,可以知道第一位是任意字符时排在str前面的字符串的数量。接着看第二位,第二位的思路和第一位一样,同样可以知道第二位是任意字符时排在str前面的字符串的数量,以此类推,后面的字符都算完之后,把全部结果相加
但是,这个时候还有一个问题,在这道题中12个字符是固定的,所以假如第一位不是a,是b,那么a在后面的字符中一定会出现,同时b也不会再出现,所以在进行上面的计算时,不能直接以字典序来进行计算,在计算每一位时要根据尚未出现过得字符的顺序,来排列未出现的字符的顺序,具体看代码里的注释,不明白的地方debug一步一步看。
import math
def index(s):
sum = 1
for i in range(len(s)):
s1 = s[i:]
n = 0
for j in s1:
if s[i]>j:
n += 1
sum += math.factorial(11-i)*n # 求阶乘
return sum
n = int(input())
for i in range(n):
s = raw_input()
print(index(s))
while 1:
a_b_s = [int(i) for i in raw_input().split()]
a = abs(a_b_s[0])
b = abs(a_b_s[1])
s = abs(a_b_s[2])
l = s - a - b
if l < 0:
print 'No'
elif l%2 == 0:
print 'Yes'
else:
print 'No'
N = int(raw_input())
def f(a,b,c,d):
s = a + b + c + d
if a >= 60 and b >=60 and c>=90 and d>=90:
if s >= 310:
if s>=350:
print 'Gongfei'
else:
print 'Zifei'
else:
print 'Fail'
else:
print 'Fail'
for i in range(N):
a, b, c, d = tuple(map(int,raw_input().split(' ')))
f(a,b,c,d)
##:删除前两位
#:删除前一位
@:将本行已经收到的都删除掉
num = int(raw_input())
for i in range(num):
ch_list = []
chars = list(raw_input())
for ch in chars:
if ch == '#' and ch_list:
ch_list.pop()
elif ch == '@':
ch_list = []
elif ch != '#':
ch_list.append(ch)
print("".join(ch_list))
input = [int(i) for i in raw_input().split()]
n = input[0]
data = []
for i in range(n):
data.append([input[2*i+1], input[2*i+2]])
max_t = max([j[1] for j in data])
def f(x, t):
if t < max_t:
return (1 if [x,t] in data else 0) + max(f(x-1, t+1),f(x, t+1),f(x+1, t+1))
else:
return (1 if [x,t] in data else 0)
print(f(5,0))
n, m = raw_input().split(" ")
t1, t2, t3, t4 = raw_input().split(" ")
sum1 = (abs(int(n) - int(m)) + int(n) - 1) * int(t1) + 2*int(t2) + int(t3)
sum2 = int(t4) * (int(n) - 1)
print(sum1 if sum1 < sum2 else sum2)
添加一个字符转为拿掉一个字符,检测结果是一样的。
import sys
str1 = raw_input()
for i in range(len(str1)):
if str1[:i] + str1[i+1:] == (str1[:i] + str1[i+1:])[::-1]:
print 'Yes'
sys.exit()
print 'No'
def mm(a,b):
while a%b !=0:
a,b = b,(a%b)
return b
while(1):
m = [int(i) for i in raw_input().split()]
n = [int(i) for i in raw_input().split()]
a = m[1]
for i in n:
if a >= i:
a += i
else:
a += mm(a, i)
print a
n, m = list(int(i) for i in raw_input().split())
nums = list(int(i) for i in raw_input().split())
cut = 0
sm = m
for i in range(n):
if sm - nums[i] >= 0:
sm = sm - nums[i]
else:
cut += 1
sm = m - nums[i]
print cut + 1
import math
r, x, y, x1, y1 = map(int, raw_input().split())
print int(math.ceil(math.sqrt(( (x1-x)**2 + (y1-y)**2))/(2*r)))
勾股定理l+=(4*(r_max*2-1))0.5其实是2((r_max2-1)**0.5)
a=raw_input()
n=a[0]
b=a[1:].split()
c=[]
for i in b:
c.append(float(i))
l=0
for i in range(int(n)):
r_max=max(c)
c.remove(r_max)
l+=(4*(r_max**2-1))**0.5
if l>=20:
break
print i+1
如果你想在笔试中用到ListNode来创建节点,你需要声明一个类,不要注释掉。
while True:
try:
class ListNode(object):
def __init__(self,val):
self.val = val
self.next = None
n = input()
if n == 0:
print None
else:
head = ListNode(0)
line = raw_input().strip()
k = input()
if k == 0:
print 0
else:
array = [int(a) for a in line.split()]
node = head
for i in range(n):
new = ListNode(array[i])
node.next = new
node = new
head = head.next
p1 = head
p2 = head
for i in range(k):
p1 = p1.next
while p1:
p1 = p1.next
p2 = p2.next
print p2.val
except:
break