1.有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?
解题思路:其实如果算个数,就很简单,以排列组合位解题突破口,但是居然要输出?听到也是很是吓了一跳?感觉要遍历?啊这?
小编也是个不懂要问的人,问了老师居然说组成的三位数不重复而且不能出现重复数字如:111、112等,着实又吓了一跳?
于是我拿起了手中的笔,一波操作终于明白老师葫芦里装的啥了!
那不就是三维交点吗?而不重复就是去掉某些点?感觉这个图说不清楚啊!
瞬间直观不受,也就是首先点在[1,4]区间上的空间点,无重复就是去掉面对交线和体对交线的点吧!啊这?这就是买的药?原来如此,也太嗨理解了吧!
上代码!记住一维一个for,而为用两个for,三维就套三次!
else:
# 传统循环嵌套
for i in num_list:
for j in num_list:
for k in num_list:
if i != j and i != k and j != k:
# 最终结果保存为列表,每种组合用元组保存
result_list.append((i,j,k))
# 最终组合个数,也可以使用len()
count_num += 1
这代码太多了吧!给你装逼!
#使用itertools工具后,循环嵌套层数明显减少,代码量减少2行
from itertools import product
for i, j, k in product(num_list,repeat=3):
if i != j and i != k and j != k:
# 最终结果保存为列表,每种组合用元组保存
result_list.append((i,j,k))
# 最终组合个数,也可以使用len()
count_num += 1
啥?有人还闲多?你咋这么能?
result_lst = [(i,j,k) for i, j, k in product(num_list,repeat=3) if i != j and i != k and j != k]
5.输出100以内的素数
import math #导入math库,以便使用里面的一个求平方根的函数
l = [2, 3] #因为range函数上限不能小于下线,所以2,3预先加到素数列表中,直接从5开始(因为知道4不是素数)循环
for i in range(5, 101): #第一层循环,从5到100
for j in range(2, int(math.sqrt(i))+1): #第二层循环,逐个判断是否有因子
if i%j == 0: #如果出现整除说明有因子
break #跳出循环判断下一个
else: #如果第二层循环结束还没有跳出的话
l.append(i) #说明是素数,加到列表里
print(" ".join(map(str, l))) #先将列表中的元素变为字符串再用空格连接输出
6.输入一个数,判断是不是素数
n = int(input("请输入一个正整数n:"))
if n < 2: #判断是否大于1的整数,且1不是素数
print("%d不是素数!"%n)
else:
for i in range(2,n):
if n % i == 0: #判断2——i是否有能被整除
print("%d不是素数!"%n)
break
else:
print("%d是素数!"%n)
7.输出出斐波那契数列的前n项
n=int(input('输出斐波拉契数列的前n项:n='))
list=[]
for m in range(0,n):
if m==0:
list.append(0)
elif m==1:
list.append(1)
else:
list.append(list[m-1]+list[m-2])
for i in range(len(list)):
print(list[i],end=' ')
忍不住装个B
a,b = 0 , 1
while b<200:
print(b),
a,b = b,a+b
讲解思路
起源
兔子问题:“假定一对大兔子每月能生一对小兔子,且每对新生的小兔子经过一个月可以长成一对大兔子,具备繁殖能力,如果不发生死亡,且每次均生下一雌一雄,问一年后共有多少对兔子?”
分析:第一个月兔子没有繁殖能力,所以还是一对;两个月后生下一对兔子,共有两对;三个月后,老兔子生下一对,小兔子还没有繁殖能力,所以一共是三对,以此类推,可以列出下表
表中1,1,2,3,5,8,13.....构成一个序列,这个数列有一个特点就是前两项之和等于后一项
数学函数定义:
1 青蛙跳台阶问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法。
提示:f(n) = f(n-1) + f(n-2)
应用:
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶......也可以跳上n级台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法。
提示:f(n) = 2n-1
2 如果我们用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问8个2*1的小矩形无重叠地覆盖一个2*8的大矩形,总共有多少种方法?
提示:f(8) = f(7) + f(6)