题单目录

1.P1914 小书童——凯撒密码

2.P1028 [NOIP2001 普及组] 数的计算

3.P1036 [NOIP2002 普及组] 选数

4.P1149 [NOIP2008 提高组] 火柴棒等式

5.P1217 [USACO1.5] 回文质数 Prime Palindromes

6.P1478 陶陶摘苹果(升级版)

7.P1618 三连击(升级版)


1.P1914 小书童——凯撒密码

n = int(input())str = input()for i in range(len(str)):asc = ord(str[i]) + nif asc > ord('z'):asc = asc - ord('z') + ord('a')-1temp = chr(asc)print(f'{temp}',end='')

2.P1028 [NOIP2001 普及组] 数的计算

h = [0] * 10001n = int(input())for i in range(1, n + 1):h[i] = 1for j in range(1, i // 2 + 1):h[i] += h[j]print(h[n])

3.P1036 [NOIP2002 普及组] 选数

import mathans = 0def isPrime(sum):if sum<2:return Falsefor i in range(2,int(math.sqrt(sum))+1):if sum%i == 0:return Falsereturn Truedef dfs(num,i,sum):global ans,lif num == k:if isPrime(sum):ans += 1returnfor j in range(i,n):dfs(num+1,j+1,sum+l[j])returnn,k = map(int,input().split(' '))l = list(map(int,input().split(' ')))dfs(0,0,0)print(ans)

4.P1149 [NOIP2008 提高组] 火柴棒等式

感觉没有写错,但是提交上去会显示超时,怎么改?????????

l = [6, 2, 5, 5, 4, 5, 6, 3, 7, 6]n = int(input())n -= 4ans = 0flag = 0def f(num):global ansif num == 0:return 6while num != 0:ans += l[num%10]num //= 10return ansfor i in range(1111):for j in range(1111):num = f(i)+f(j)+f(i+j)if num == n:flag += 1print(flag)

5.P1217 [USACO1.5] 回文质数 Prime Palindromes

还是遇到很大的数字之后就又超时了,怎么解决呀?????

import matha,b = map(int,input().split(' '))def isPrime(n):if n<2:return Falsefor i in range(2,int(math.sqrt(n))+1):if n%i == 0:return Falsereturn Truedef isPalindromes(n):k = 0mark = nwhile mark != 0:m = mark % 10mark //= 10k = k*10 + mif k == n:return Truereturn Falsefor i in range(a,b+1):if isPrime(i) and isPalindromes(i):print(i)

6.P1478 陶陶摘苹果(升级版)

sort 与 sorted 区别:

  1. sort 是应用在 list 上的方法,属于列表的成员方法,sorted 可以对所有可迭代的对象进行排序操作。
  2. list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
  3. sort使用方法为ls.sort(),而sorted使用方法为sorted(ls)

这道题主要在于要自己定义排序的规则

import functoolsn, s = map(int,input().split(' '))a, b = map(int,input().split(' '))h = a + bans = 0l = []for i in range(n):temp = list(map(int,input().split(' ')))l.append(temp)def my_cmp(x,y):if x[1]>y[1]:return 1else:return -1l.sort(key=functools.cmp_to_key(my_cmp))for k in l:if k[0]=k[1]:s -= k[1]ans += 1if s < k[1]:breakprint(ans)

7.P1618 三连击(升级版)

太不容易了,一开始的做法是跟普通三连击的那个做法来的,结果就是有几个测试点一直都不能通过,然后我就再去思考了其他解法。

突然想到可以用字符串结合集合的做法去完成,很显然方便了很多,就是需要不断地去测试找到一些特殊情况,可算是找到了,最终全部通过了AC。

a, b, c = map(int,input().split(' '))flag = 1if a == 0 or b == 0 or c == 0:flag = 1else:for i in range(1,334):num1 = i * anum2 = i * bnum3 = i * cnum11 = str(num1)num22 = str(num2)num33 = str(num3)if len(num11)==3 and len(num22)==3 and len(num33)==3:str_all = num11+num22+num33str_set = set(str_all)if len(str_set) == 9 and '0' not in str_set:print(f'{num1} {num2} {num3}')flag = 0if flag:print('No!!!')

8.总结

继续加油!!!