简单学Python多线程解一道小学数学题

题目是:10名选手参加象棋比赛,每2名选手之间都要比赛一盘。记分方法是胜一盘得2分,平一盘得1分,负一盘得0分。比赛结果出来时选手们所得分数各不相同。已知第一名和第二名一盘都没有输过,前两名的得分总和比第三名多20分,第四名与最后四名得分总和相等。则第三名得多少分?

这个题不太容易列式或列方程求解,如果推理的话,容易推出前4名的成绩。但是,为了验证一下推理的结果,就用编程穷举一下吧:

#用x1-x10表示第一名至第10名的得分
#因为成绩各不相等,很容易得出各选手分数上下限
#将已知或推导出的条件用上:总分90,第一+第二=第三+20,
	第四=后四名之和,第一至第十成绩为降序。
for x1 in range(9,18):
	for x2 in range(8,17):
		for x3 in range(7,16):
			for x4 in range(6,15):
				for x5 in range(5,14):
					for x6 in range(4,13):
						for x7 in range(3,12):
							for x8 in range(2,11):
								for x9 in range(1,10):
									for x10 in range(0,9):
										if x1+x2+x3+x4+x5+x6+x7+x8+x9+x10==90 
											and x1+x2-x3==20 and x4==x7+x8+x9+x10 
											and x1>x2 and x2>x3 and x3>x4 and x4>x5 
											and x5>x6 and x6>x7 and x7>x8 and x8>x9 and x9>x10:
												print(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10)

解出来了,但用时太长,大约10分钟。这种循环多的代码,适合用多线程,只需简单的修改一下代码即可,将这个循环改为函数,然后开进程算。这里将第一名的可能的成绩分给各进程计算:

def abc(x1) :	for x2 in range(8,17):		for x3 in range(7,16):			for x4 in range(6,15):				for x5 in range(5,14):					for x6 in range(4,13):						for x7 in range(3,12):							for x8 in range(2,11):								for x9 in range(1,10):									for x10 in range(0,9):										if x1+x2+x3+x4+x5+x6+x7+x8+x9+x10==90											and x1+x2-x3==20 and x4==x7+x8+x9+x10 											and x1>x2 and x2>x3 and x3>x4 and x4>x5 											and x5>x6 and x6>x7 and x7>x8 and x8>x9 and x9>x10:												print(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10)thread1=threading.Thread(target=abc(9))thread2=threading.Thread(target=abc(10))thread3=threading.Thread(target=abc(11))thread4=threading.Thread(target=abc(12))thread5=threading.Thread(target=abc(13))thread6=threading.Thread(target=abc(14))thread7=threading.Thread(target=abc(15))thread8=threading.Thread(target=abc(16))thread9=threading.Thread(target=abc(17))thread1.start()thread2.start()thread3.start()thread4.start()thread5.start()thread6.start()thread7.start()thread8.start()thread9.start()

这个也解出了相同的答案,用时5分钟,节省了一半时间,受制于硬件水平以及代码还有优化的空间,节省的时间不是很多。

对了,题目的答案为:

简单学Python多线程解一道小学数学题

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/75028
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 11 日
下一篇 2024 年 7 月 11 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注