亲密数
问题:如果 a 的所有正因子和等于b,b 的所有正因子和等于 a,因子包括1但不包括本身,且 a 不等于b,则称 a,b 为亲密数对。编写一个程序,求解范围内的亲密数。
思路:用 a 依次对 i (1~a/2) 求模,如果结果为0,则 i 为 a 的一个因数。
def solve(n):sum_num = 0for i in range(1, int(n/2)+1):if n%i == 0:sum_num += ireturn sum_numn = int(input())for a in range(1, n):b = solve(a)if (solve(b) == a) and (b!=a):print(a, b)
自守数
自守数是指一个数的平方的末尾数等于该数自身的自然数。例如,5 和 6 是一位的自守数;25 和 76 是两位的自守数。编写一个程序,求解范围内的自守数。
重要特性:以自守数为后几位的两个数相乘,乘积的后几位仍是这个自守数(如176 * 576 = 101376)。也就是说,需要密切关注 n 位自守数与 (n+1) 位自守数之间的关系。
for n in range(1,10000):# 求数的长度k=len(str(n))# 计算数的后几位t=(n*n) % (10**k)if t==n:print(n)
猜数大师
题目描述:
电脑能够随机地岀加減算式,并判断玩家回答的得数是否正确。
如果它出的是加法,则两个加数均是自然数且不能大于100;如果它出的是减法,则被减数和減数都要是自然数且小于100,同时被减数大于等于减数。
计算机会出5道题,之后由你来统计回答的正确次数。
关键:如何刻画计算机随机出加减法?
if random.randint(0, 1) == 0:c = a + belse:b = random.randint(1, a) # 被减数大于减数c = a - b
绘制图形
语雀内容
题目描述:
使用画笔工具绘制图形,画笔的颜色为蓝色,画笔粗细为2,图形由_8个_5边形组合而成,图形的中心点在坐标在舞台的正中心,五边形边长为100,程序运行之后开始运行。
import turtlescreen = turtle.Screen()t = turtle.Turtle()t.pensive (2)t.pencolor("blue")for _ in range(8):for _ in range(5):t.forward(100)t.left(360/5)t.left(360/8)screen.mainloop()
夹数
如果num在一段数字范围内,则返回num;否则返回离这个范围最近的边界。
示例:
>>> clamp(2, 3, 10)2>>> clamp(7, 3, 10)7>>> clamp(15, 3, 10)10
解答:
def clamp_num(num, a, b):return max(min(num, max(a, b)), min(a, b))
输入转数组
num = int(input())l = list(map(lambda x:int(x),input().split(' ')))print(max(l))print(min(l))print(sum(l))
字符转ASCII码
使用 chr() 函数。
>>> chr(65)'A'
字符串列表中元素合并
result = ''.join(a)
例如:
for i in range(m):tstr.append(chr(i+65))result = ''.join(tstr)
获得列表最大值的下标
def max_idx(arr):return arr.index(max(arr))
试题 基础练习 字母图形
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
数据规模与约定:
1 <= n, m <= 26。
l = list(map(lambda x:int(x),input().split(' ')))n = l[0]m = l[1]all_str = []for i in range(26):all_str.append(chr(i+65))for i in range(26):all_str.append(chr(i+65))res = {}delta = 1for i in range(n):res[i] = all_str[0:m]print(''.join(res[i]))all_str.insert(0, all_str[delta+i])all_str.pop()delta+=1
计算年龄
张三、李四、王五、刘六的年龄是等差数列,他们四人的年龄相加是26,相乘是880。求以他们年龄为前4项的等差数列的前20项。
分析:这个题非常简单,遍历即可。设首个人年龄为 a,增量为 x,则核心是判断 a 和 x 的范围。
也就是判断出:a 的范围是[1, 4], x 的范围是[1, 6]
不然会把负数也算进来,虽然这个题很容易检查出来,但数据大了之后可能就不好检查了。因此一定要注意变量的范围!
for a in range(1, 4):for x in range(1, 6):if a*(a+x)*(a+2*x)*(26-3*a-3*x)==880:print(a, a+x, a+2*x, a+3*x)

金蝉素数
由1, 3, 5, 7, 9排列而成的五位素数,同时去掉最高位与最低位后的3位数是素数;同时去掉高二位与低二位后的1位数也是素数。求这些“金蝉素数”可能的解。
三步走:
- 生成1、3、5、7、9的全排列,每种排列的结果为一个元组
- 将元组转换为数字
- 判断是否为素数 ```python from itertools import permutations
def isPrime(n): for i in range(2, n//2+1): if(n % i == 0): return False return True
def tuple2num(t): return int(str(t).replace(“(“, “”).replace(“)”, “”).replace(“,”, “”).replace(“ “, “”))
for i in permutations([1,3,5,7,9],5): if (isPrime(tuple2num(i)) & isPrime(tuple2num(i[1:-1])) & isPrime(i[2])): print(i)
<a name="qzDKd"></a>## 小孩和饼干问题描述:假设你是一位家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子 i ,都有一个**胃口值 gi **,这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j 都有一个尺寸 sj 。**如果 sj >= gi ,我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。**你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。```python# 胃口是g,饼干尺寸是sdef findbis(g, s):g.sort()s.sort()child = 0biscuit = 0while child<len(g) and biscuit < len(s):if g[child]<=s[biscuit]:child += 1biscuit+=1return childg = [1, 1, 6]s = [1, 2, 5]x = findbis(g, s)print(x)
JewelsInStones
# 查找J中的每个字符在S出现的次数的总和# Input: J="aA", S="aAAbbbb"# Output: 3def count_J_in_S(J, S):tempdict = {i: S.count(i) for i in set(S)}return sum(tempdict.get(i, 0) for i in set(J))j = input("请输入J:")s = input("请输入S:")print("结果为:", count_J_in_S(j, s))
对字典的使用,包括使用i: S.count(i)统计每个键及其出现的次数;get(i, 0)后的0是指设定默认值为0
找到第一个不重复字符
给定一个字符串,找到第一个不重复的字符,输出索引,如不存在输出 -1。
示例:
s = "loveleetcode"return 2s = "leetcode"return 0s = "aa"return -1
代码:
def findUnique(s):temp = {}for i in s:try:temp[i] += 1except:temp[i] = 1for idx, j in enumerate(s):if(temp[j]==1):return idxreturn -1s = input("Please input a string:")a = findUnique(s)print(a)
注意:这里使用了try...except...的方法获取字符串每个字母及其出现次数的字典。这实际上是简化的 if...else... 好处是这是按顺序排列的。
如果按照temp = {i:s.count(i) for i in s},则结果将是乱序的。
注意这里对enumerate的使用。
还有更好用的方法,是使用自带的 Counter ,这样就不需要 for 循环里套 try…except了:
import collectionstemp = collections.Counter(s)
