1. 列舉
列舉是基於逐個嘗試答案的一種問題求解策略。
2. 完美立方
形如$a^3 = b^3 + c^3 + d3$的等式被稱為完美立方等式。例如$123 = 6^3 + 8^3 + 10^3$
問題:編寫程式,對任給的正整數n(n<=100),尋找所有的四元組(a, b, c, d),使得$a^3 = b^3 + c^3 + d^3$,其中a,b,c,d大於1,小於等於n,且b<=c<=d。
輸入:乙個正整數n(n<=100)。
輸出:每行輸出乙個完美立方。輸出格式為cube = a,triple = (b, c, d)。
求解:備註:判斷條件邊界很重要
方法一:
#!/usr/bin/env python
# _*_ coding: utf-8 _*_
import sys
import math
# n = sys.ar**[1]
n = 24
i = 0
for a in xrange(2, n + 1):
for b in xrange(2, n):
for c in xrange(b, n):
for d in xrange(c, n):
i += 1
if math.pow(a, 3) == math.pow(b, 3) + math.pow(c, 3) + math.pow(d, 3):
print 'cube = %d, triple = (%d, %d, %d)' % (a, b, c, d)
print '%d iterations.' % i
輸出cube = 6, triple = (3, 4, 5)
cube = 12, triple = (6, 8, 10)
cube = 18, triple = (2, 12, 16)
cube = 18, triple = (9, 12, 15)
cube = 19, triple = (3, 10, 18)
cube = 20, triple = (7, 14, 17)
cube = 24, triple = (12, 16, 20)
46552 iterations.
方法二#!/usr/bin/env python
# _*_ coding: utf-8 _*_
import sys
import math
# n = sys.ar**[1]
n = 24
i = 0
for a in xrange(2, n + 1):
for b in xrange(2, a):
for c in xrange(b, a):
for d in xrange(c, a):
i += 1
if math.pow(a, 3) == math.pow(b, 3) + math.pow(c, 3) + math.pow(d, 3):
print 'cube = %d, triple = (%d, %d, %d)' % (a, b, c, d)
print '%d iterations.' % i
輸出cube = 6, triple = (3, 4, 5)
cube = 12, triple = (6, 8, 10)
cube = 18, triple = (2, 12, 16)
cube = 18, triple = (9, 12, 15)
cube = 19, triple = (3, 10, 18)
cube = 20, triple = (7, 14, 17)
cube = 24, triple = (12, 16, 20)
12650 iterations.
從上面可以看出列舉的邊界不同,效率會差將近三倍。
參考資料
列舉 完美立方
列舉是基於逐個嘗試答案的一種問題求解策略。形如a 3 b3 c3 d3的等式被稱為完美立方等式。例如123 63 83 10 3 問題 編寫程式,對任給的正整數n n 100 尋找所有的四元組 a,b,c,d 使得a3 b3 c3 d 3 其中a,b,c,d大於1,小於等於n,且b c d。輸入 乙...
列舉 完美立方
description 形如 a3 b3 c3 d3的等式被稱為完美立方。例如 123 63 83 103。編寫乙個程式,對任給的正整數 n n 100 尋找所有的四元組 a,b,c,d 使得a3 b3 c3 d3,其中a,b,c,d大於1,小於等於n,且b c d。input 多組測試資料,每組測...
列舉 完美立方
題目描述 形如 a3 b 3 c 3 d 3的等式被稱為完美立方。例如 12 3 6 3 8 3 10 3。編寫乙個程式,對任給的正整數 n 100 尋找所有的四元組 a,b,c,d 使得 a 3 b 3 c 3 d 3,其中 a,b,c,d a,b,c,d 大於 1,小於 等n,且 b c d。輸...