syuntoku14の進捗

進捗を書きなぐります

AOJでPythonに慣れる(5問目)

問題
Space Coconut Crab
所感
・眠い
・mathを初めて使った気がする

解法
・x+y2+z3=e より、yとzが決まるとxが決まる。よってyとzについてforループを回せば行けるはず(c++はこれで良い)
c++のときと同じようにやったらRuntime Errorをくらったので少し工夫がいる。ループを一つに減らす。

コード
・Runtime Errorのやつ

while True:
    e=int(input())
    if e==0:
        break
    m=e
    for z in range(int(e**(1/3)),-1,-1):
        temp=e-z**3
        for y in range(int(temp**(1/2)),-1,-1):
            x=temp-y**2
            if x>=0 and (x+y+z<m):
                m=x+y+z
    print(m)

・改善版

from math import sqrt

while True:
    e=int(input())
    if e==0:
        break
    m=e
    for z in range(e):
        if(z**3>e):
            break
        temp=e-z**3
        y=int(sqrt(temp))
        x=temp-y**2
        m=min(m,x+y+z)
    print(m)