import datetime
start_time = datetime.date(2000,1,1)
end_time = datetime.date(2020,10,1)# 得到两者之间相隔的天数 7579
DeltaTime = end_time - start_time
aday = datetime.timedelta(days =1)
ans =0for i inrange(7579):if start_time.day ==1or start_time.isoweekday()==1:
ans +=2else:
ans +=1
start_time += aday
# 最后一天没有计算,所以手动加2即可
ans +=2print(ans)
答案:8879
5. 七段码
思路;从图的角度入手,将紧邻的边看作图中的节点的连通,美剧可能出现的情况,判断连通性即可
代码实现:
import itertools
new_list =[]# 计数
num =0# 采用字典将该标号相接的所有标号列举出来dict={'a':['f','b'],'b':['a','c','g'],'c':['b','d','g'],'d':['e','c'],'e':['d','f','g'],'f':['a','e','g'],'g':['b','c','e','f']}
string ="".join(list(dict.keys()))for i inrange(1,8):# 对string字符串中的前i个字符进行无序组合for j in(itertools.combinations(list(string), i)):
new_list.append("".join(j))for str1 in new_list:iflen(str1)==1:
num +=1continuefor situation in itertools.permutations(str1):for c inrange(1,len(situation)):if situation[c -1]notindict[situation[c]]:breakelse:
num +=1breakprint(num)
答案:80
6. 成绩查询
思路:计算及格人数以及优秀人数,再计算相关结果即可
代码实现;
defsearch_grade():
n =int(input())
total = n
jige =0
great =0for i inrange(n):
grade =int(input())if grade >=85:
jige +=1
great +=1elif grade >=60:
jige +=1else:passprint(str(int(round(jige / n *100,0)))+'%')print(str(int(round(great / n *100,0)))+'%')return0
search_grade()
from calendar import isleap
gap_year =[0,31,29,31,30,31,30,31,31,30,31,30,31]
normal_year =[0,31,28,31,30,31,30,31,31,30,31,30,31]defjudge(date, is_gap):
month =int(date[:2])
day =int(date[2:])if month >12:returnFalseif is_gap:return day < gap_year[month]else:return day < normal_year[month]defjudge_next_year(year:str):
res_year = year[::-1]
new_year = year + res_year
revers_str = new_year[::-1]if new_year == revers_str:
is_gap = isleap(int(year))
flag = judge(res_year, is_gap)if flag:return[True, revers_str]else:return[False, revers_str]else:return[False, revers_str]defget_next(data:str):
year = data[:4]
res =list()whileTrue:
year =str(int(year)+1)
ans = judge_next_year(year)
flag, tmp = ans[0], ans[1]if flag:
res.append(tmp)break
num =int(data[0:2])whileTrue:
num +=1
year =str(num)+str(num)
ans = judge_next_year(year)
flag, tmp = ans[0], ans[1]if flag:
res.append(tmp)breakreturn res
if __name__ =='__main__':
data =input()
res = get_next(data)for i in res:print(i)
defson_str_sum(s):
n =len(s)
index_ls =[0]*26
index_ls[ord(s[0])-97]+=1
dp =[0]* n
dp[0]=1for i inrange(1, n):
dp[i]= dp[i -1]+ i +1- index_ls[ord(s[i])-97]
index_ls[ord(s[i])-97]= i +1returnsum(dp)if __name__ =='__main__':
s =input()
ans = son_str_sum(s)print(ans)
答案:
9. 平面切分
思路: 通过观察规律得到新加入的直线所分割成的平面数为1 + 加入直线之后平面中现存直线的交点
代码实现:
defget_node(line1, line2):
A1 = line1[0]
B1 = line1[1]
A2 = line2[0]
B2 = line2[1]# 如果平行if A1 - A2 ==0:returnNone
x =(B2 - B1)/(A1 - A2)
y = A1 * x + B1
# 避免浮点数计算中出现精度问题
x =round(x,8)
y =round(y,8)return(x, y)if __name__ =="__main__":
n =int(input())
lines =[]for i inrange(n):
a, b =map(int,input().split())
lines.append((a, b))
lines =list(set(lines))
n =len(lines)
mid =[1]*(n +1)
node =set()for i inrange(1, n):
node.clear()for j inrange(i):
mux_node = get_node(lines[i], lines[j])if mux_node ==None:passelse:
node.add(mux_node)
mid[i]+=len(node)print(sum(mid))