BETA

初心者日記(8)『AtCoder (Train Ticket)を解く』

投稿日:2020-06-16
最終更新:2020-06-24

ABC079 C『Train Ticket』を解きたい。
しかし難しそう。だから問題を簡単にすることにした(?)
本来は4桁の数字のところを、まず2桁として考える。

s = int(input())  
a = s // 10  
b = s % 10  

for i in range(2 ** 1):  
    p = a  
    if i % 2 == 0:  
        x = '+'  
    else:  
        x = '-'  

    if x == '+':  
        p += b  
    else:  
        p -= b  

    if p == 7:  
        print(str(a) + x + str(b) + '=7')  
        break  

『34』と入力すると、ちゃんと『3+4=7』と出力される。『92』も『9-2=7』と出力され、2桁での処理は完璧になった。これを3桁に増やす。

s = int(input())  

a = s // 100  
b = s // 10 % 10  
c = s % 10  

def p_mark(j):  
    if j % 2 == 0:  
        return '+'  
    else:  
        return '-'  

for i in range(2 ** 2):  
    j = i  
    p = a  

    x = p_mark(j)  

    if x == '+':  
        p += b  
    else:  
        p -= b  

    j = j // 2  

    y = p_mark(j)  

    if y == '+':  
        p += c  
    else:  
        p -= c  

    if p == 7:  
        print(str(a) + x + str(b) + y + str(c) + '=7')  
        break  

これもちゃんと計算式を出力してくれる。これをさらに4桁に増やす。

s = int(input())  
a = s // 1000  
b = s // 100 % 10  
c = s // 10 % 10  
d = s % 10  

def p_mark(j):  
    if j % 2 == 0:  
        return '+'  
    else:  
        return '-'  

for i in range(2 ** 3):  
    j = i  
    p = a  

    x = p_mark(j)  

    if x == '+':  
        p += b  
    else:  
        p -= b  

    j = j // 2  

    y = p_mark(j)  

    if y == '+':  
        p += c  
    else:  
        p -= c  

    j = j // 2  

    z = p_mark(j)  

    if z == '+':  
        p += d  
    else:  
        p -= d  

    if p == 7:  
        print(str(a) + x + str(b) + y + str(c) + z + str(d) + '=7')  
        break  

sampleの『1222』は『1+2+2+2=7』、『0290』は『0-2+9+0=7』、『3242』は『3+2+4-2=7』と出力してくれた。ちゃんと段階を踏んでいけば分かりやすくなる。コンテスト本番はそんなに時間をかけられないのだけれども。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

tnodino(つのでぃの)のブログ。日頃の内容を記事にしています。

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう