Python 2.7 - 380 378 372 371 367 363 357 354 352 348 336 ตัวอักษร
เพียงแค่การค้นหาแรงเดรัจฉานที่เรียบง่าย
from itertools import*
s=lambda x:[x]['1'>x>'0':]+['(%s%s%s)'%f for i in range(1,len(x))for f in product(s(x[:i]),'*/-+^',s(x[i:]))]
def E(e):
try:return eval(e.replace("^","**"))
except:0
A={i:e for i in range(input(),input()+1)for x in permutations(`i`)for e in s("".join(x))[x>='1':]if E(e)==i}
print len(A)
for v in A:print v,A[v]
ตัวอย่างการเรียกใช้:
1
300
9
128 (2^(8-1))
289 ((9+8)^2)
216 (6^(1+2))
121 (11^2)
153 (3*51)
25 (5^2)
125 (5^(2+1))
126 (6*21)
127 ((2^7)-1)
คำอธิบาย:
s(x)
เป็นฟังก์ชันที่รับสตริงที่มีลำดับของตัวเลขและส่งกลับนิพจน์ทั้งหมดโดยใช้ตัวเลขเหล่านั้นในลำดับนั้น
[x]['1'>x>'0':]
หาค่ารายการที่มี x ถ้า x เป็น '0' หรือลำดับของตัวเลขที่ไม่ได้ขึ้นต้นด้วย '0' มิฉะนั้นจะประเมินเป็นรายการว่าง โดยทั่วไปจะจัดการกรณีที่ฉันเข้าร่วมตัวเลขทั้งหมดเข้าด้วยกัน
['(%s%s%s)'%f for i in range(1,len(x))for f in product(s(x[:i]),'*/-+^',s(x[i:]))]
โดยทั่วไปแบ่งพาร์ติชัน x ออกเป็นสองส่วน (ทั้งสองมีความยาวไม่เป็นศูนย์), เรียก s () ในแต่ละส่วนและรวมผลลัพธ์ทั้งหมดพร้อมกับโอเปอเรเตอร์บางส่วนระหว่างพวกเขาโดยใช้ผลิตภัณฑ์ ()
E(e)
เป็นหลักฐานที่ปลอดภัย มันจะคืนค่าของ e ถ้า e นั้นถูกต้องและไม่มีอย่างอื่น
A={i:e for i in range(input(),input()+1)for x in permutations(`i`)for e in s("".join(x))[x>='1':]if E(e)==i}
โดยทั่วไปรหัสนี้จะพยายามตัวเลขทั้งหมดในช่วงอนุญาตให้ตัวเลขของพวกเขาและทดสอบแต่ละนิพจน์ s () สร้างขึ้นสำหรับการเปลี่ยนแปลงนั้นละเว้นการแสดงออกครั้งแรกถ้า x ไม่เริ่มต้นด้วย '0' เพราะถ้า x ไม่เริ่มต้นด้วย ' 0 'จากนั้นนิพจน์แรกจะเป็น x
รุ่นอื่น - 397 ตัวอักษร
นี่คือรหัสของฉันหากคุณจำเป็นต้องใช้เศษส่วน:
from fractions import*
from itertools import*
s=lambda x:["Fraction(%s)"%x]['1'>x>'0':]+['(%s%s%s)'%f for i in range(1,len(x))for f in product(s(x[:i]),'*/-+^',s(x[i:]))]
def E(e):
try:return eval(e.replace("^","**"))
except:0
A={i:e for i in range(input(),input()+1)for x in permutations(`i`)for e in s("".join(x))[x>='1':]if E(e)==i}
print len(A)
for v in A:print v,A[v].replace("Fraction","")
/
ทำงานได้หรือไม่ ยกตัวอย่างเช่นสิ่งที่เป็น1/3
?