yy,mm=map(int,input().split()) m1 = (1,3,5,7,8,10,12) m2 = (4,6,9,11) defis_leap(yy): if yy%100==0: if yy % 400 == 0: return1 return0 else: if yy % 4 == 0: return1 return0 if mm in m1: print(31) elif mm in m2: print(30) else: if is_leap(yy): print(29) else: print(28)
没啥可说的。
P1085 [NOIP2004 普及组] 不高兴的津津
1 2 3 4 5
arr = [] for i inrange(7): a ,b = map(int,input().split()) arr.append(a+b) print(arr.index(max(arr))+1ifmax(arr)>8else0)
注意考虑小于8小时的情况。
P1909 [NOIP2016 普及组] 买铅笔
1 2 3 4 5 6 7
import math n = int(input()) arr = [] for i inrange(3): a ,b = map(int, input().split()) arr.append(math.ceil(n/a)*b) print(min(arr))
P5717【深基3.习8】三角形分类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
side = list(map(int, input().split())) side.sort() ifsum(side[:2])>side[-1]: if side[0]**2+side[1]**2==side[-1]**2: print("Right triangle") elif side[0]**2+side[1]**2>side[-1]**2: print("Acute triangle") else: print("Obtuse triangle") if side[0]==side[1] or side[1]==side[-1]: print("Isosceles triangle") if side[0]==side[-1]: print("Equilateral triangle") else: print("Not triangle")
做的时候想着三边都比一次多麻烦,想起自己判断三角形的时候都是先排序再计算,就优化了一下过程。
P1422 小玉家的电费
1 2 3 4 5 6 7
n = int(input()) if n <= 150: print("{:.1f}".format(n * 0.4463)) elif n <= 400: print("{:.1f}".format(150 * 0.4463 + (n - 150) * 0.4663)) else: print("{:.1f}".format(150 * 0.4463 + 250 * 0.4663 + (n - 400) * 0.5663))
P1424 小鱼的航程(改进版)
1 2 3 4 5 6 7 8 9
x ,n = map(int, input().split()) day = n // 7 * 5 rem = n % 7 if rem: if x + rem ==7or x == 7: //如开始为周日肯定只休息一天;如r+x==7即最后一天为周六,也休息一天 rem -= 1 elif x + rem >= 8: //最后一天已过周日,休息两天 rem -= 2 print((day+rem)*250)
思路是弄明白游泳的天数,整一周肯定游5天。如果有剩余天数,和起始天数组合看看中间有没有休息。
P1888 三角函数
1 2 3 4 5 6 7 8 9 10 11
side = list(map(int, input().split())) side.sort() a = side[2] b = side[0] while a % b: temp = a % b a = b b = temp side[2] //= temp side[0] //= temp print("{}/{}".format(side[0],side[2]))
# 读入 isbn = list(input()) # '-'的下标位置列表 lst = [1,5,11] # 校验和初始化 checksum = 0 # 倒着读lst,防止删除元素后导致下标变化 for i in lst[::-1]: del isbn[i] # 计算校验和 for i inrange(len(isbn)-1): checksum += int(isbn[i]) * (i + 1) checksum %= 11 last = str(checksum) # 求余为10则变为'X' if last == '10': last = 'X' # 校验和检测 if last == isbn[-1]: print("Right") else: # 重新加入'-' for i in lst: isbn.insert(i,'-') isbn[-1]=last print(''.join(isbn))
做的时候遗漏了checksum为10(X)的情况
P5719【深基4.例3】分类平均
1 2 3 4 5 6 7 8 9
n,k=map(int,input().split()) ok = [] nok = [] for i inrange(1,n+1): if i % k == 0: ok.append(i) else: nok.append(i) print("{:.1f} {:.1f}".format(sum(ok)/len(ok),sum(nok)/len(nok)))
P5720【深基4.例4】一尺之棰
1 2 3 4 5 6
length = int(input()) ans = 1 while length!=1: length //= 2 ans += 1 print(ans)
P5721【深基4.例6】数字直角三角形
1 2 3 4 5 6 7
n = int(input()) res = 1 for i inrange(n,0,-1): for j inrange(res,res+i): print("{:02g}".format(j),end='') res += i print("\n",end='')
P1009 [NOIP1998 普及组] 阶乘之和
1 2 3 4 5 6
n = int(input()) lst = [1] for i inrange(1,n+1): temp = lst[i-1] * i lst.append(temp) print(sum(lst)-1)
s = input() defisnegative(s): ifint(s) < 0: return1 if isnegative(s): # 去掉负号并倒序存入 s = s[:0:-1] lst = list(s) # 删除开头的0 if lst[0]=='0': del lst[0] # 直接int(str(lst))会报错,ValueError: invalid literal for int() with base 10 ans = - int(''.join(map(str, lst))) else: s = s[::-1] ans = int(s) print(ans)
P1720 月落乌啼算钱(斐波那契数列)
嗯?斐波那契
1 2 3 4 5 6
n = int(input()) f = [0,1] for i inrange(n): num = f[i] + f[i+1] f.append(num) print("{:.2f}".format(f[n]))
P1420 最长连号
1 2 3 4 5 6 7 8 9 10 11 12 13
# 递归方法 n = int(input()) lst = list(map(int, input().split())) res = [] for i inrange(n): temp = 1 for j inrange(i+1,n): if lst[j]==lst[j-1]+1: temp += 1 else: break res.append(temp) print(max(res))
P1075 [NOIP2012 普及组] 质因数分解
1 2 3 4 5
n = int(input()) for i inrange(2,int(n**1/2)+1): if n % i == 0: print(int(n/i)) break
可能优化就是先挑出质数再遍历。
P5725【深基4.习8】求三角形
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
n = int(input()) temp = 1 for i inrange(n): for j inrange(n): print("{:02g}".format(temp),end='') temp += 1 print() print() temp = 1 for i inrange(n): for j inrange(n-i-1): print(' '*2,end='') for j inrange(i+1): print("{:02g}".format(temp),end='') temp += 1 print()
P5726【深基4.习9】打分
1 2 3
n = int(input()) score = list(map(int,input().split())) print("{:.2f}".format((sum(score)-max(score)-min(score))/(n-2)))
P4956 [COCI2017-2018#6] Davor
1 2 3 4 5 6 7 8 9
# 52*(7x+21k)=52*7(x+3k) n = int(input())/(52*7) x,k = 0,0 # x,k 为正整数; 1≤x≤100; x 尽可能大,k 尽可能小; for k inrange(1,int(n)): x = n - 3*k if x <= 100: break k += 1 print("{:.0f}\n{:d}".format(x,k))
P1089 [NOIP2004 提高组] 津津的储蓄计划
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
save,mum_save = 0,0 for i inrange(12): # 手中得到 300 save += 300 pay = int(input()) # 扣除每月预计花销 save -= pay # 当月余额不足,程序结束 if (save<0): print("-{}".format(i+1)) exit() # 预计余额超过 100,存钱 if save >= 100: mum_save += save // 100 save %= 100 save += mum_save * 120 print(save)
P1217 [USACO1.5] 回文质数 Prime Palindromes
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
a,b = map(int,input().split()) # 判断是否为素数 defis_prime(num): for i inrange(2,int(num**1/2)+1): if num % i == 0: return0 return1 # 判断是否为回文数 defis_palindrome(num): s = str(num) if s == s[::-1]: return1 return0
for i inrange(a,b+1): if is_palindrome(i) and is_prime(i): print(i)
tle了,需要改进算法。
1 2 3 4 5 6 7
defis_prime(num): if num%2==0: return0 for i inrange(3,int(num**1/2)+1,2): if num % i == 0: return0 return1
稍微变动了一下,判断完2以后,不再判断偶数。少了一个tle。
学习一下素数筛
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# 埃式筛 # 核心思想:每找到一个质数,将其倍数全部删除 defget_prime(n): # vis 表示是否删除 vis = [0] * (n + 1) vis[0]=vis[1]=0 # 质数列表 prime = [] # 从小到大,找到第一个未被标记的数,就是质数 for i inrange(2,n+1): if vis[i]==0: prime.append(i) # 找到质数后删除其倍数 for j inrange(i+i,n+1,i): vis[j]=1 return prime
L = int(input()) # 埃式筛 defget_prime(n): vis = [0] * (n + 1) vis[0]=vis[1]=0 prime = [] for i inrange(2,n+1): if vis[i]==0: prime.append(i) for j inrange(i+i,n+1,i): vis[j]=1 return prime prime = get_prime(L) pack,pack_num = 0,0 for p in prime: pack += p pack_num += 1 if pack>L: pack -= p pack_num -= 1 break print(p) print(pack_num)
n = int(input()) a = list(map(int,input().split())) res = [] for i inrange(n): cnt = 0 for j inrange(i): if a[j]<a[i]: cnt += 1 res.append(cnt) for result in res: print(result,end=' ')
P1427 小鱼的数字游戏
1 2 3
a = list(map(int,input().split())) for i in a[-2::-1]: print(i,end=' ')
P5727【深基5.例3】冰雹猜想
1 2 3 4 5 6 7 8 9 10
n = int(input()) res = [n] while n!=1: if n%2==0: n//=2 else: n = 3*n+1 res.append(n) for i in res[::-1]: print(i,end=' ')
P1047 [NOIP2005 普及组] 校门外的树
1 2 3 4 5 6 7 8 9
l, m = map(int,input().split()) # vis 记录树的存在,1 为存在,0 为不存在 vis = [1]*(l+1) for _ inrange(m): u, v = map(int,input().split()) # 将区间内的树标为不存在 for i inrange(u,v+1): vis[i]=0 print(sum(vis))
P5728【深基5.例5】旗鼓相当的对手
1 2 3 4 5 6 7 8 9 10 11 12 13
n = int(input()) c,m,e,s=[],[],[],[] res = 0 for i inrange(n): chi,math,eng = map(int,input().split()) c.append(chi) m.append(math) e.append(eng) s.append(chi+math+eng) for j inrange(i): ifabs(c[i]-c[j])<=5andabs(m[i]-m[j])<=5andabs(e[i]-e[j])<=5andabs(s[i]-s[j])<=10: res += 1 print(res)
P2550 [AHOI2001] 彩票摇奖
1 2 3 4 5 6 7 8 9 10 11 12 13
n = int(input()) price = list(map(int,input().split())) # 注意还有没获奖的情况 res = [0for _ inrange(8)] for _ inrange(n): cnt = 0 lst = list(map(int,input().split())) for i in lst: if i in price: cnt += 1 res[7-cnt] += 1 for i in res[:-1]: print(i,end=' ')
w, x, h = map(int,input().split()) q = int(input()) # 初始化三维数组 vis = [[[1for _ inrange(h)]for _ inrange(x)]for _ inrange(w)] for i inrange(q): x1,y1,z1,x2,y2,z2=map(int,input().split()) # 区域内方块被标记清除 # 注意数组越界问题 for i inrange(x1-1,x2): for j inrange(y1-1,y2): for k inrange(z1-1,z2): vis[i][j][k]=0 # 统计剩余方块 cnt = 0 for i inrange(w): for j inrange(x): for k inrange(h): if vis[i][j][k]: cnt += 1 print(cnt)
m, n = map(int,input().split()) res = [0]*10 for i inrange(m, n+1): for j instr(i): res[int(j)] += 1 for ans in res: print(ans, end=' ')
P2141 [NOIP2014 普及组] 珠心算测验
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
n = int(input()) lst = list(map(int,input().split())) lst.sort() cnt = 0 for i inrange(2,len(lst)): flag = False for j inrange(i-1): for k inrange(j+1, i): if lst[j] + lst[k] == lst[i]: cnt += 1 flag = True break if flag: break print(cnt)
P1614 爱与愁的心痛
1 2 3 4 5 6 7 8 9
n, m = map(int, input().split()) # 注意ans初始化值不能太小,考虑到lst中每个值<=100,故初始化为101*m lst, ans = [], 101*m for i inrange(n): lst.append(int(input())) # 注意range范围,莫名其妙被卡了半天 for i inrange(n-m+1): ans = min(ans, sum(lst[i:i+m])) print(ans)
P2911 [USACO08OCT] Bovine Bones G
1 2 3 4 5 6 7
s1, s2, s3 = map(int, input().split()) cnt = [0] * (s1+s2+s3+1) for i inrange(1,s1+1): for j inrange(1,s2+1): for k inrange(1,s3+1): cnt[i+j+k] += 1 print(cnt.index(max(cnt)))
P1161 开灯
1 2 3 4 5 6 7 8 9 10 11 12
# 模拟法 n = int(input()) # 再乘个1000就MLE了,不过这题只2e6就够了 lamp = [0] * 2000000 for _ inrange(n): a, t = map(float,input().split()) for i inrange(1,int(t+1)): if lamp[int(a*i)]: lamp[int(a*i)] = 0 else: lamp[int(a*i)] = 1 print(lamp.index(1))
1 2 3 4 5 6 7 8 9
# 利用异或,从开始一个灯没亮经过n次操作到只剩一个灯亮着,故每次与ans异或,到最后便为答案 # 比起上面的暴力,时间提升了40%,空间的利用也大幅降低,没有MLE的风险。 n = int(input()) ans = 0 for _ inrange(n): a, t = map(float,input().split()) for i inrange(1,int(t+1)): ans ^= int(a*i) print(ans)
n = int(input()) snake = [[0for _ inrange(n)] for _ inrange(n)] # d 代表方向:0右,1下,2左,3上 d = 0 # idx表示当前行与列的位置 idx = [0,0] for i inrange(1,n*n+1): snake[idx[0]][idx[1]] = i if d == 0: # 到右侧边界 if idx[1] == n-1or snake[idx[0]][idx[1]+1] != 0: d = 1 idx[0] += 1 else: idx[1] += 1 elif d == 1: # 到下侧边界 if idx[0] == n-1or snake[idx[0]+1][idx[1]] != 0: d = 2 idx[1] -= 1 else: idx[0] += 1 elif d == 2: # 到左侧边界 if idx[1] == 0or snake[idx[0]][idx[1]-1] != 0: d = 3 idx[0] -= 1 else: idx[1] -= 1 else: # 到上侧边界 if snake[idx[0]-1][idx[1]] != 0: d = 0 idx[1] += 1 else: idx[0] -= 1 for i inrange(n): for j inrange(n): print("{:3g}".format(snake[i][j]),end='') print()
又一道模拟题,开始没想到加个方向变量,后面想到了却又因为被绕进去了就调了半天…
P5732【深基5.习7】杨辉三角
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
n = int(input()) # 初始化一个n*n的二维数组 lst = [[0for _ inrange(n)] for _ inrange(n)] # 生成杨辉三角 for i inrange(n): # 第一列为 1 lst[i][0] = 1 for i inrange(1,n): for j inrange(1,i+1): # 除第一列,每一个位置的数都是左上+正上 lst[i][j] = lst[i-1][j-1]+lst[i-1][j] # 打印 for i inrange(n): for j inrange(i+1): print(lst[i][j], end=' ') print()
# 边长,火把,萤石 n, m, k = map(int,input().split()) # 生成黑暗原野,为方便后面不再判定火把和萤石光的越界,这里数组开大些 field = [[0for _ inrange(n+4)] for _ inrange(n+4)] # 插火把 lst = [-2,2] for _ inrange(m): x, y = map(int, input().split()) # 点亮 for i inrange(x,x+3): for j inrange(y,y+3): field[i][j] = 1 for i in lst: field[x+1+i][y+1] = 1 field[x+1][y+1+i] = 1 # 摆萤石 for _ inrange(k): x, y = map(int, input().split()) # 点亮 for i inrange(x-1,x+4): for j inrange(y-1,y+4): field[i][j] = 1 # 生成怪物,并统计 cnt = 0 for i inrange(2,n+2): for j inrange(2,n+2): if field[i][j] == 0: cnt += 1 print(cnt)
# 由输入为N*N矩阵,可以从第一行输入获取N # 习惯性的加了split()结果被卡了一会儿。 lst = list(map(int, input())) n = len(lst) for _ inrange(n-1): lst.extend(list(map(int, input()))) # ans是用于输出答案的数组,ans[0]为N,后面为压缩数字;cnt用于记录当前数字出现的次数 ans = [n] cnt = 1 # 若第一个数字为1,则向ans添加0 if lst[0]: ans.append(0) for i inrange(1,n*n): if lst[i]==lst[i-1]: cnt += 1 else: ans.append(cnt) cnt = 1 ans.append(cnt) for i in ans: print(i,end=' ')
# create_graph() defcreate_graph(): return [['/'for _ inrange(n)] for _ inrange(n)] # input_graph() definput_graph(lst): for i inrange(n): ipt = list(input()) for j inrange(n): lst[i][j] = ipt[j] return lst # 1.turn_90() defturn_90(lst): # (x,y)->(y,n-1-x) res = create_graph() for i inrange(n): for j inrange(n): res[j][n-1-i] = lst[i][j] return res # 2.turn_180() defturn_180(lst): for _ inrange(2): lst = turn_90(lst) return lst # 3.turn_270() defturn_270(lst): for _ inrange(3): lst = turn_90(lst) return lst # 4.reflect() defreflect(lst): res = create_graph() for i inrange(n): for j inrange(n): res[i][n-1-j] = lst[i][j] return res # 5.combain() defcombain(lst): lst = reflect(lst) lst1 = turn_90(lst) lst2 = turn_180(lst) lst3 = turn_270(lst) return lst1,lst2,lst3 # 6.is_same() # determine if lst1 is same to lst2, true then return 1, else return 0. defis_same(lst1,lst2): for i inrange(n): for j inrange(n): if lst1[i][j] != lst2[i][j]: return0 return1 # test() deftest(lst1,lst2): if is_same(turn_90(lst1),lst2): return1 elif is_same(turn_180(lst1),lst2): return2 elif is_same(turn_270(lst1),lst2): return3 elif is_same(reflect(lst1),lst2): return4 elif is_same(lst1,lst2): return6 l1,l2,l3 = combain(lst1) if is_same(l1,lst2) or is_same(l2,lst2) or is_same(l3,lst2): return5 return7 # begin n = int(input()) org, ter = create_graph(), create_graph() org, ter = input_graph(org), input_graph(ter) print(test(org,ter))
emmmm这是目前这周写的最长的代码了,不过写的很开心。
本题重点可能在找转90度后的坐标关系。
转180和270也有对应关系,不过直接偷懒摆了。
Day9-10——【入门5】字符串
字符串掌握的明显不熟,需加强。
P5733【深基6.例1】自动修正
1 2 3
s = input() s = s.upper() print(s)
?
P1914 小书童——凯撒密码
1 2 3 4
n,s = int(input()),input() for c in s: # 注意z的下一个是a print(chr((ord(c)+n-ord('a'))%26+ord('a')),end='')
P1125 [NOIP2008 提高组] 笨小猴
1 2 3 4 5 6 7 8 9 10 11 12 13 14
s, cnt = input(), [0]*25 # 100以内质数,直接打表 prime = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97] for c in s: cnt[ord(c)-ord('a')] += 1 minx = 101 for i in cnt: if i > 0and i < minx: minx = i x = max(cnt)-minx if x in prime: print("Lucky Word",x,sep='\n') else: print("No Answer",0,sep='\n')
P1957 口算练习题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
i = int(input()) for _ inrange(i): lst = list(map(str,input().split())) iflen(lst)==3: if lst[0] == 'a': op = '+' elif lst[0] == 'b': op = '-' else: op = '*' res = lst[1]+op+lst[2] else: res = lst[0]+op+lst[1] res = res+'='+str(eval(res)) print(res,len(res),sep='\n')
# AC code: keyboard = [['a','b','c'],['d','e','f'],['g','h','i'],['j','k','l'],['m','n','o'],['p','q','r','s'],['t','u','v'],['w','x','y','z'],[' ']] s, cnt = input().replace('\r',''), 0 for a in s: idx = 0 for l in keyboard: if a in l: idx = ord(a)-ord(l[0]) break cnt += idx+1 print(cnt) # AC code2: # 评论区偷的,提供另一个思路。 a=[1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,1,2,3,4,1,2,3,1,2,3,4] s=input().replace("\r","") count=0 for i inrange(0,len(s)): if(s[i]==' '): count+=1 else: count+=a[int(ord(s[i]))-int(ord('a'))] print(count)
P3741 honoka的键盘
开始的思路是:
存在3个V或3个k相连时,一次可以多一个VK
在开头和结尾只有两个V或者K的情况没有统计进去,故给前后都添加一个字符
但是这样做还是没全AC,剩下没过的全是多统计了一个
1 2 3 4 5
for add in ['V','K']: copy = add + s + add if"VVV"in copy or"KKK"in copy: cnt += 1 break
s = “VVK” 情况下,下面这种判断不正确
1 2
if'VV'in s or'KK'in s: cnt += 1
最终还是选择先遍历一遍字符串,统计“VK”数量并修改为XX,然后再查找是否还存在“VV”或“KK”
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
n, s = int(input()), input().strip() # 这次整个自动机吧 # state 0: pre is k; state 1: pre is v state, cnt = 0, 0 # 先遍历一遍字符串,统计“VK”数量并修改为XX,然后再查找是否还存在“VV”或“KK” for w in s: if state: if w == 'K': cnt += 1 state = 0 continue if w == 'V': state = 1 s = s.replace("VK","XX") if'VV'in s or'KK'in s: cnt += 1 print(cnt)
P1321 单词覆盖还原
1 2 3 4 5 6 7
s = input().strip() b_cnt, g_cnt = 0, 0 for i inrange(len(s)-2): b_cnt += int(s[i]=='b'or s[i+1]=='o'or s[i+2]=='y') for i inrange(len(s)-3): g_cnt += int(s[i]=='g'or s[i+1]=='i'or s[i+2]=='r'or s[i+3]=='l') print(b_cnt,g_cnt,sep='\n')
没想到代码这么简单…想了半天都想不出来,实在不行看了题解
P1553 数字反转(升级版)
1 2 3 4 5 6 7 8 9 10 11 12
s, ans = input().strip(), '' if'.'in s: s1, s2 = s.split('.') ans = str(int(s1[::-1]))+'.'+str(int(s2))[::-1] elif'/'in s: s1, s2 = s.split('/') ans = str(int(s1[::-1]))+'/'+str(int(s2[::-1])) elif'%'in s: ans = str(int(s[:-1][::-1]))+'%' else: ans = str(int(s[::-1])) print(ans)
P1603 斯诺登的密码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
s, tar, value, res, ans = list(input().replace('\r','').split()), [], [], [], '' # input().replace(" ",",") key = ['one','two','three','four','five','six','seven','eight','nine','ten','eleven','twelve','thirteen','fourteen','fifteen','sixteen','seventeen','eighteen','nineteen','twenty','a','both','another','first','second','third'] value.extend(list(range(1,21))) value.extend([1,2,1,1,2,3]) dict = dict(list(zip(key,value))) for i in s: if i indict.keys(): tar.append(dict[i]) for i in tar: res.append(i*i%100) res.sort() for i in res: ans = ans + "{:02g}".format(i) # 判断ans是否有新数据加入 if ans != '': print(int(ans)) else: print(0)
P1200 [USACO1.1] 你的飞碟在这儿 Your Ride Is Here
1 2 3 4 5 6 7 8
s1, s2 = input().strip(), input().strip() deff(s): ans = 1 for c in s: ans *= ord(c) - ord('A') + 1 ans %= 47 return ans print("GO"if f(s1)==f(s2) else"STAY")
P1597 语句解析
1 2 3 4 5
a,b,c = 0,0,0 code = input().strip().replace(":=",'=').replace(";","\n") # use exec() to run code. exec(code) print(a,b,c)
rec, cnt = '', [0]*26 # print alphabet # for i in range(26): # print("'{}'".format(chr(i+ord('A'))),end=',') alp = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'] for _ inrange(4): rec += input().strip().replace(" ",'') for c in rec: iford('A')<=ord(c)<=ord('Z'): cnt[ord(c)-ord('A')] += 1 dict = dict(list(zip(alp,cnt))) M = max(dict.values()) deff(dict,n): cnt = 0 for i indict: ifdict[i]>=n: cnt += 1 for i indict: ifdict[i]>=n: print('*',end=' ') cnt -= 1 ifnot cnt: break else: print(' ',end=' ') returnprint('') for i inrange(M,0,-1): f(dict,i) for a in alp: print(a,end=' ')
Day11-Day13——【入门6】函数与结构体
P5735【深基7.例1】距离函数
1 2 3 4 5 6 7
points, c = [], 0.0 for _ inrange(3): points.append(list(map(float,input().split()))) deff(p1,p2): return (abs(p1[0]-p2[0])**2 + abs(p1[1]-p2[1])**2)**0.5 c += f(points[0],points[1])+f(points[0],points[2])+f(points[1],points[2]) print("{:.2f}".format(c))
n, lst = input().strip(), list(map(int,input().split())) # 埃式筛 defget_prime(n): # vis 表示是否删除 vis = [0] * (n + 1) vis[0]=vis[1]=0 # 质数列表 prime = [] # 从小到大,找到第一个未被标记的数,就是质数 for i inrange(2,n+1): if vis[i]==0: prime.append(i) # 找到质数后删除其倍数 for j inrange(i+i,n+1,i): vis[j]=1 return prime prime = get_prime(max(lst)) for i in lst: if i in prime: print(i,end=' ')
P5737【深基7.例3】闰年展示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
a, b = map(int, input().strip().split()) res = [] defis_leap(y): if y%100==0: if y%400==0: return1 return0 if y%4==0: return1 return0 for y inrange(a,b+1): if is_leap(y): res.append(y) print(len(res)) for y in res: print(y,end=' ')
P5738【深基7.例4】歌唱比赛
1 2 3 4 5 6 7
n, m = map(int, input().strip().split()) res = [] for _ inrange(n): lst = list(map(int,input().strip().split())) lst.sort() res.append(sum(lst[1:-1])) print("{:.2f}".format(max(res)/(m-2)))
P5739【深基7.例7】计算阶乘
1 2 3 4 5 6
n = int(input()) deff(n): if n == 1: return1 return f(n-1)*n print(f(n))
n = int(input()) res = [[1for _ inrange(2**n)] for _ inrange(2**n)] deff(x1,y1,x2,y2): if x2-x1==1: res[x1][y1] = 0 return # 左上 for i inrange(x1,(x1+x2+1)//2): for j inrange(y1,(y1+y2+1)//2): res[i][j] = 0 # 右上 f((x1+x2+1)//2,y1,x2,(y1+y2-1)//2) # 左下 f(x1,(y1+y2+1)//2,(x1+x2-1)//2,y2) # 右下 f((x1+x2+1)//2,(y1+y2+1)//2,x2,y2) return f(0,0,2**n-1,2**n-1) for i inrange(2**n): for j inrange(2**n): print(res[i][j],end=' ') print()
被坐标卡了半天,难绷。最后还是带入例子验证了一遍。
P5740【深基7.例9】最厉害的学生
1 2 3 4 5 6 7 8 9 10 11 12
stu, n, idx, max_i, max_s = [], int(input()), 0, 0, 0 defsum_s(lst): returnint(lst[1])+int(lst[2])+int(lst[3]) for _ inrange(n): ipt = list(input().split()) stu.append(ipt) if sum_s(ipt) > max_s: max_s = sum_s(ipt) max_i = idx idx += 1 for i in stu[max_i]: print(i,end=' ')
stu, n, idx= [], int(input()), 0 defsum_s(lst): returnint(lst[1])+int(lst[2])+int(lst[3]) deff(lst1,lst2): for i inrange(1,4): ifabs(int(lst1[i])-int(lst2[i])) > 5: return0 return1 for _ inrange(n): ipt = list(input().split()) stu.append(ipt) for i inrange(n-1): for j inrange(i+1,n): ifabs(sum_s(stu[i])-sum_s(stu[j])) <= 10and f(stu[i],stu[j]): print(stu[i][0],stu[j][0],sep=' ')
P5742【深基7.例11】评等级
1 2 3 4 5 6 7 8 9
n = int(input()) deff(lst): return (int(lst[1])+int(lst[2])) > 140and (int(lst[1])*7+int(lst[2])*3) >= 800 for _ inrange(n): ipt = list(input().split()) if f(ipt): print("Excellent") else: print("Not excellent")
P1304 哥德巴赫猜想
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
n = int(input()) defget_prime(n): vis = [0]*(n+1) vis[0]=vis[1]=1 prime = [] for i inrange(2,n+1): if vis[i] == 0: prime.append(i) for j inrange(i+i,n+1,i): vis[j] = 1 return prime prime = get_prime(n) for i inrange(4,n+1,2): for p in prime: if i-p in prime: print("{}={}+{}".format(i,p,i-p)) break