タイトルが「AtCoderの切手問題」になっていますが、「切符問題」では?
クラスを定義するよりも関数を定義したほうが簡単な気がします。
Python
1s = list(input())
2e = [ s[0], '', s[1], '', s[2], '', s[3], '=7' ]
3def f(i, n):
4 if i < 7:
5 e[i] = '+'; f(i + 2, n + int(e[i+1]))
6 e[i] = '-'; f(i + 2, n - int(e[i+1]))
7 elif n == 7:
8 print(''.join(e))
9 exit()
10f(1, int(e[0]))
追記
別解
Python
1a = list(map(int, input()))
2def f(i):
3 if i < 4:
4 for j in range(2):
5 f(i + 1)
6 a[i] = -a[i]
7 elif sum(a) == 7:
8 print(f'{a[0]}{a[1]:+d}{a[2]:+d}{a[3]:+d}=7')
9 exit()
10f(1)
追記2
元のコードを生かしたコードです。
Python
1strlist = list(input())
2intlist = [int(i) for i in strlist]
3
4class s:
5 def __init__(self, x):
6 self.val = x
7 self.dic = {}
8
9a = [s(1), s(2), s(3), s(4)]
10def s(i): return a[i-1]
11
12s(1).dic.setdefault(strlist[0], intlist[0])
13for i in range(1, 4):
14 for j in s(i).dic:
15 s(i+1).dic.setdefault(j+"+"+strlist[i], s(i).dic[j]+intlist[i])
16 s(i+1).dic.setdefault(j+"-"+strlist[i], s(i).dic[j]-intlist[i])
17for k, v in s(4).dic.items():
18 if v == 7:
19 print(k)
20 break
説明してほしいなら、コメントください。
追記3
「わかりました!」というコメントだったので、説明は不要なんですね。
質問のコードのどこが悪かったのかを本当に分かったのかどうか疑問ですが、
結局やりたかったことは次のようなことだったようです。
Python
1s = input() # string
2a = list(map(int, s)) # array of int
3d = [ {s[0]:a[0]}, {}, {}, {} ] # dict list
4for i in range(1, 4):
5 for k, v in d[i-1].items():
6 d[i][k + '+' + s[i]] = v + a[i]
7 d[i][k + '-' + s[i]] = v - a[i]
8for k, v in d[3].items():
9 if v == 7:
10 print(k + '=7')
11 break
タイトルが「切手問題」のままで、「切符の番号の問題」に修正されなかったことが残念です。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/06 11:08