0から9999までの5つの数字の入力に基づいて、数値Xを導出する以下のコードを書いています。 Xも持っていますが、その位置は間違っています(例えば、1000位のXの数字は100桁で与えられます)。右から2桁の5つの数字から数字Xを派生させてください
例入力:
6087,5173,1358,3825,2531
この入力に対して期待出力される。
8712
以下のコードは、Xを算出し、それは強引です。どうすれば時間の複雑さを減らすことができますか?
m = ('6087','5173','1358','3825','2531')
x = ['']*5
for i in range(0,5):
a=int(m[i])/1000
b=int(m[i])/100-10*a
c=int(m[i])/10-100*a-10*b
d=int(m[i])%10
x[i]=[a,b,c,d]
for num in range(0,10000):
thousand=num/1000
hundred=num/100-10*thousand
decade=num/10-100*thousand-10*hundred
digits=num%10
count=0
for j in range(0,5):
if (thousand==x[j][1] or thousand==x[j][2] or thousand==x[j][3]) and (hundred==x[j][0] or hundred==x[j][2] or hundred==x[j][3]) and (decade!=x[j][0] and decade!=x[j][1] and decade!=x[j][2] and decade!=x[j][3]) and (digits!=x[j][0] and digits!=x[j][1] and decade!=x[j][2] and decade!=x[j][3]):
count+=1
elif (thousand==x[j][1] or thousand==x[j][2] or thousand==x[j][3]) and (decade==x[j][0] or decade==x[j][1] or decade==x[j][3]) and (hundred!=x[j][0] and hundred!=x[j][1] and hundred!=x[j][2] and hundred!=x[j][3]) and (digits!=x[j][0] and digits!=x[j][1] and decade!=x[j][2] and decade!=x[j][3]):
count+=1
elif (thousand==x[j][1] or thousand==x[j][2] or thousand==x[j][3]) and (digits==x[j][0] or digits==x[j][1] or digits==x[j][2]) and (hundred!=x[j][0] and hundred!=x[j][1] and hundred!=x[j][2] and hundred!=x[j][3]) and (decade!=x[j][0] and decade!=x[j][1] and decade!=x[j][2] and decade!=x[j][3]):
count+=1
elif (hundred==x[j][0] or hundred==x[j][2] or hundred==x[j][3]) and (decade==x[j][0] or decade==x[j][1] or decade==x[j][3]) and (thousand!=x[j][0] and thousand!=x[j][1] and thousand!=x[j][2] and thousand!=x[j][3]) and (digits!=x[j][0] and digits!=x[j][1] and decade!=x[j][2] and decade!=x[j][3]):
count+=1
elif (hundred==x[j][0] or hundred==x[j][2] or hundred==x[j][3]) and (digits==x[j][0] or digits==x[j][1] or digits==x[j][2]) and (thousand!=x[j][0] and thousand!=x[j][1] and thousand!=x[j][2] and thousand!=x[j][3]) and (decade!=x[j][0] and decade!=x[j][1] and decade!=x[j][2] and decade!=x[j][3]):
count+=1
elif (decade==x[j][0] or decade==x[j][1] or decade==x[j][3]) and (digits==x[j][0] or digits==x[j][1] or digits==x[j][2]) and (thousand!=x[j][0] and thousand!=x[j][1] and thousand!=x[j][2] and thousand!=x[j][3]) and (hundred!=x[j][0] and hundred!=x[j][1] and hundred!=x[j][2] and hundred!=x[j][3]):
count+=1
if count == 5:
print num
数字Xを1つの文で生成する方法を説明できますか? –
これは数学の問題です。入力は与えられ、Xは答えです。 – HaoHuaqing
スクリプトの最初の部分については、数字を文字列に変換します。数字を繰り返し処理する方が簡単です。 2番目の部分については、[NumPyパッケージ](https://docs.scipy.org/doc/numpy-dev/user/quickstart.html)を試してみてください。配列操作をより簡単かつ迅速にコード化することができます。 – Jalo