用1kΩ电阻可以组合出多少个阻值?
大家伙儿想过这个问题吗?
工作学习累了我们来放松一下!
一起来玩个游戏,大家可以用最多10个1kΩ电阻来组合,看看谁能组合出最多种的阻值?
单纯回复数量不能断定,记得画出图来哦!!
参与游戏就能获得5芯积分,组合出最多种阻值的小伙伴额外再获得50芯积分哦(统计到4月10日)~~
1个电阻1种,2个电阻2种,3个电阻4种,4个电阻9种,5个电阻23种,再向上太多了
引用: eew_1PrAA0 发表于 2024-3-20 11:18 1个电阻1种,2个电阻2种,3个电阻4种,4个电阻9种,5个电阻23种,再向上太多了
这应该是一种什么样的排列方式?
引用: eew_1PrAA0 发表于 2024-3-20 11:18 1个电阻1种,2个电阻2种,3个电阻4种,4个电阻9种,5个电阻23种,再向上太多了
3个电阻的时候应该是三个吧。算不出第四个。
引用: wangerxian 发表于 2024-3-20 14:02 这应该是一种什么样的排列方式?
3个串,3个并,2并+1串,2串+1并
引用: eew_1PrAA0 发表于 2024-3-20 16:41 3个串,3个并,2并+1串,2串+1并
明白了!原来是这样。
引用: wangerxian 发表于 2024-3-20 17:58 明白了!原来是这样。
组合列完还得找出重复的阻值,统计种类哈哈
引用: [quote]wangerxian 发表于 2024-3-20 17:58
明白了!原来是这样。
引用: wangerxian 发表于 2024-3-20 21:43 组合列完还得找出重复的阻值,统计种类哈哈
程序的话,如果不考虑桥式接法那种,只考虑串并的话,是比较简单的
一个只考虑串、并联方式的Python代码参考:
+ 表示串,| 表示并
def _getR(key:list, result:dict) -> list:
'''获得方案,key:搭配模式,result:原方案'''
re = []
# 把所有可能的组合遍历一遍
for mode_x in result[key[0]]:
for mode_y in result[key[1]]:
# 串接
tmp = f'({mode_x[0]})+({mode_y[0]})'
tmp = tmp.replace('(R)', 'R')
re.append((tmp, mode_x[1] + mode_y[1]))
# 并接
tmp = f'({mode_x[0]})|({mode_y[0]})'
tmp = tmp.replace('(R)', 'R')
re.append((tmp, mode_x[1] * mode_y[1] / (mode_x[1] + mode_y[1])))
return re
def getR(n:int) -> list:
'''获得方案,n:总个数'''
result = {
1:[('R', 1000.0),],
2:[('R+R', 2000.0), ('R|R', 500.0)]
}
if n < 3:
# 1、2时直接返回
return result[n]
else:
# 3以上需要把自1-n的全部获取到
for i in range(3, n+1):
re = []
# 遍历所以拆分方式,如5拆为1+4,2+3 6拆为1+5,2+4,3+3
for j in range(1, i // 2 + 1):
re += _getR([j, i-j], result)
result[i] = re
return result[n]
if __name__ == '__main__':
# 5个电阻方案
s = getR(5)
print()
tmp = []
redu = []
for _s in s:
# 因小数除不尽问题,保留6位小数
if '{:.6f}'.format(_s[1]) in tmp:
# 存在相同数值的方案视为同一方案,需删除
redu.append(_s)
else:
tmp.append('{:.6f}'.format(_s[1]))
# 删除数值重复方案
for r in redu:
s.remove(r)
# 打印个数,方案
print(len(s), s)
5 个的结果是:
22
[('R+(R+(R+(R+R)))', 5000.0), ('R|(R+(R+(R+R)))', 800.0), ('R+(R|(R+(R+R)))', 1750.0), ('R|(R|(R+(R+R)))', 428.57142857142856), ('R+(R+(R|(R+R)))', 2666.6666666666665), ('R|(R+(R|(R+R)))', 625.0), ('R+(R|(R|(R+R)))', 1400.0), ('R|(R|(R|(R+R)))', 285.7142857142857), ('R+(R+(R+(R|R)))', 3500.0), ('R|(R+(R+(R|R)))', 714.2857142857143), ('R+(R|(R+(R|R)))', 1600.0), ('R|(R|(R+(R|R)))', 375.0), ('R+(R+(R|(R|R)))', 2333.333333333333), ('R|(R+(R|(R|R)))', 571.4285714285714), ('R+(R|(R|(R|R)))', 1250.0), ('R|(R|(R|(R|R)))', 200.0), ('R+((R+R)|(R+R))', 2000.0), ('R|((R+R)|(R+R))', 500.0), ('(R+R)|(R+(R+R))', 1200.0), ('(R+R)|(R+(R|R))', 857.1428571428571), ('(R|R)+(R|(R+R))', 1166.6666666666665), ('(R|R)+(R|(R|R))', 833.3333333333333)]
引用: 极限零 发表于 2024-3-21 11:06 一个只考虑串、并联方式的Python代码参考: + 表示串,| 表示并 def _getR(key:list, result:dict) ...
大佬还真写程序去验证了呀!