- count = 0
- for i in range(1,5): # 百位
- for j in range(1,5): # 十位
- for h in range(1,5): # 个位
- if i==j or j==h or i==h:
- continue
- count = count + 1
- print(f'{i}{j}{h}')
- print(count)
打印出所有的 "水仙花数", 所谓 "水仙花数" 是指一个三位数, 其各位数字立方和等于该数本身. 例如: 153 是一个 "水仙花数", 因为 153=1 的三次方 + 5 的三次方 + 3 的三次方
或者
- for b in range(1,10): # 百位
- for s in range(0,10): # 十位
- for g in range(0, 10): # 个位
- shu = 100*b + 10*s + g
- data = pow(b,3) + pow(s,3) + pow(g,3)
- if shu==data:
- print(shu)
求 s=a+aa+aaa+aaaa+aa...a 的值, 其中 a 是一个数字. 例如 2+22+222+2222+22222(此时共有 5 个数相加), 几个数相加有键盘控制.
- num = input('输入 1~9 的数字:')
- repeat = int(input('输入要循环的次数:'))
- data = []
- for i in range(1, repeat+1):
- data.append(i*num)
- print(data)
猴子吃桃问题: 猴子第一天摘下若干个桃子, 当即吃了一半, 还不瘾, 又多吃了一个, 第二天早上又将剩下的桃子吃掉一半, 又多吃了一个. 以后每天早上都吃了前一天剩下的一半零一个. 到第 10 天早上想再吃时, 见只剩下一个桃子了. 求第一天共摘了多少
- def day(n):
- if n==1:
- return 1
- return 2*(day(n-1)+1)
- print(day(10))
报数
有 M 个小朋友围成一圈, 从 1 开始报数, 报的 N 的小朋友出圈.
问题: 最后剩下的小朋友是几号?
- m = int(input("几个小朋友:"))
- n = int(input("报几出圈:"))
- children = [i+1 for i in range(m)] # 把小朋友转成列表
- current = 1 # 从 1 开始报数
- while len(children) != 1:
- child = children.pop(0) # 把当前报数的小朋友拿出来
- if current == n : # 如果把的是 n, 则重新回到 1 开始报数, 且不回队
- current = 1
- else:
- current += 1
- children.append(children.pop(0)) # 如果报的不是 n, 回到队尾
- print(child)
字符串转数字
不要调用 int 转换函数. 按位读取字符串里的字符进行处理将字符串转化为整数, 给定的输入一定是合法输入不包含非法字符, 字符串头尾没有空格, 考虑字符串开头可能有正负号
- data = '-1425234534'
- mapping = {'0': 0,'1': 1,'2': 2,'3': 3,'4': 4,'5': 5,'6': 6,'7': 7,'8': 8,'9': 9}
- # 要实现的函数
- def to_int(data):
- total = 0
- # data[::-1] 是翻转字符串, 使用 enumerate 获取字符串的索引与值
- for i, v in enumerate(data[::-1]):
- # 排除正好与符号, 这里会引起错误, 计算出数值后处理字符串.
- if v != '-' and v != '+':
- # mapping[v] 是字符对应的数值, pow(10, i) 是数字所在位数的权重
- total += mapping[v] * pow(10, i)
- # 如果是负数, 这里转成负数
- if data[0] == '-':
- total = -total
- return total
- print(to_int(data))
- print(type(to_int(data)))
跑马灯
大厅里有 100 盏灯, 每盏灯都编了号码, 分别为 1-100. 每盏灯由一个开关来控制.(开关按一下, 灯亮, 再按一下灯灭. 开关的编号与被控制的灯相同.) 开始时, 灯是全灭的. 现在按照以下规则按动开关. 第一次, 将所有的灯点亮. 第二次, 将所有 2 的倍数的开关按一下. 第三次, 将所有 3 的倍数的开关按一下. 以此类推. 第 N 次, 将所有 N 的倍数的开关按一下. 问第 100 次按完以后, 大厅里还有几盏灯是亮的
- # True 代表灯亮, False 代表灯灭
- lamp = [False for _ in range(100)]
- for n in range(1,101): # n 代表第 n 次按开关
- for i in range(1,101): # i 代表第 i 盏灯的开关
- if i%n==0: # 如果 i 是 n 的倍数, 则 i 代表的灯转换状态
- lamp[i-1] = not lamp[i-1]
- for i,v in enumerate(lamp):
- if v:
- print(i+1,v)
斐波那契数列, 求第 n 位是多少
- def fib(n):
- if n == 0:
- return 0
- if n == 1:
- return 1
- return fib(n-1)+fib(n-2)
- print(fib(6))
- def fib1(n):
- data = [0,1]
- for i in range(2,n+1):
- data.append(data[i-1]+data[i-2])
- return data[n]
- print(fib1(6))
- def fib2(n):
- if n==0 or n==1:
- return n
- x,y = 0,1
- for i in range(2, n+1):
- x,y = y,x+y
- return y
- print(fib2(6))
来源: http://www.bubuko.com/infodetail-3039935.html