年齢の問題
1192 ワード
問題の説明:
王二、張三、李四、劉五の年齢は等差数列になっており、彼ら4人の年齢加算は28で、乗算は585である.彼らの年齢を前の4項の等差数列の前の15項を求めます.
マイコード:
私の考え:
等差数列通項式に従い,王二年齢をa,公差をdと仮定すると,条件2 a+3 d=14を満たす.
a(a+d)(a+2 d)(a+3 d)=585であり、またaの範囲が1から7であり、dの範囲が1から5であるため、貧挙法を用いてaとdの値を求めることができ、さらにこの等差数列の上位15項を求めることができる.
サンプルコード:
出典:http://www.cheemoedu.com/exercise/46
王二、張三、李四、劉五の年齢は等差数列になっており、彼ら4人の年齢加算は28で、乗算は585である.彼らの年齢を前の4項の等差数列の前の15項を求めます.
マイコード:
def fun(sum,cj):
for a in range(1,7):
for d in range(1,5):
sum=2*a+3*d
cj=a*(a+d)*(a+2*d)*(a+3*d)
if sum==14 and cj==585:
print "wang er is %d old,the difference is %d" % (a,d)
return a,d
aa,dd=fun(28,585)
for i in range(0,15):
print aa+dd*i,
私の考え:
等差数列通項式に従い,王二年齢をa,公差をdと仮定すると,条件2 a+3 d=14を満たす.
a(a+d)(a+2 d)(a+3 d)=585であり、またaの範囲が1から7であり、dの範囲が1から5であるため、貧挙法を用いてaとdの値を求めることができ、さらにこの等差数列の上位15項を求めることができる.
サンプルコード:
def sum(a, k, n):
s = a
for i in xrange(1, n):
s += a + i * k
return s
def mul(a, k, n):
s = a
for i in xrange(1, n):
s *= a + i * k
return s
for a in range(1, 28 / 4):
find = False
k = 1
while True:
t = sum(a, k, 4)
if t >= 28:
if t == 28 and mul(a, k, 4) == 585:
find = True
break
k += 1
if find:
for i in xrange(4):
print a + i * k,
出典:http://www.cheemoedu.com/exercise/46