1339号単語数学


1339号:単語数学
レベル:金貨
質問する
民植は数学塾で単語の数学問題を知る宿題を受けた.
単語数学の問題はN個の単語からなり、各単語はアルファベットの大文字だけからなる.このとき,問題は,各アルファベットの大文字を0から9の数字のうちの1つからNの数字に置き換えることである.同じアルファベットを同じ数字に変えるには、2つ以上のアルファベットを同じ数字に変えることはできません.
例えば、GCF+ACDEBを算出する場合、A=9、B=4、C=8、D=6、E=5、F=3、 G=7で決定すると、2つの数の和は99437に達し、最大値となる.
N個の単語がある場合は、プログラムを作成して最大にします.
入力
1行目は単語の個数N(1≦N≦10)を与える.2行目からN行目で単語1行1個.単語はアルファベットの大文字だけで構成されています.各単語に含まれるアルファベットは最大10文字で、数字の最大長は8です.異なる文字は異なる数字を表す.
しゅつりょく
指定した単語の和の最上位値を1行目に出力します.
n = int(input())
words = []
alphabets = {}
for _ in range(n):
    words.append(input())
for w in words:
    square_root = len(w)-1
    for l in w:
        if l in alphabets:
            alphabets[l] += pow(10,square_root)
        else:
            alphabets[l] = pow(10,square_root)
        square_root-=1
    
alphabets_s = sorted(alphabets.values(),reverse=True)

sum = 0 
num = 9
for i in alphabets_s: #0-9
    sum += i * num
    num-=1
print(sum)
質問キー:
  • ビットの高次数値(0-9)が最値です
  • のいくつかの計算を実験として、試してみればわかります.
  • 資料型はレイアウトとストライプを使用します.
  • 配列には単語が含まれています.([’AAA’, ‘BBB’])
  • ディクシャナリーは英語のアルファベットをキーとし、数字の桁数を値とします.
  • ex.Aが1000位なら{A:1000}
  • Aが再び100の位置から現れると{A:1100},
  • となる.
  • 100の桁数は10の2平方、10の桁数は10の1平方(pow()です.
  • 二階建てforドアが近い.
  • 最初のfor文は、単語配列にアクセスし、その単語の長さに10を乗算する.(最後は1の位置なのでlen(w)から1を減算)
  • の2番目のfor文は、dictにすでに存在する場合、10桁の平方値を加算し、そうでない場合は加算する単語の各アルファベット(英語文字)にアクセスします.
  • を求める最低価格なので、9から-1まで、桁数の多い値から結果値を乗じます.
  • 9で-1を乗算するので、ディックアルファベットを降順に並べます.
  • 感じ:
  • アルゴリズムの問題を解く場合、主にディックシーケンス番号を使わなくても解くことができるので、それを使わずに近似→結果をより困難にするより簡単な方法があると思います.
  • を望むなら、英語のアルファベットと数字のマッピングでディックシリーズを構成すると思います.
  • Pythonでpow()を使ったことがなかったことが思い出せません
  • 実施能力不足
  • を解くことができなくても、これらの問題に多く接触し、学習方法を追跡し、
  • を感じなければならない.
  • の英語文字が異なる数字で繰り返される場合はdict値に加算でき、単独で処理すべきだと思います.
  • 数学の思考の不足
  • より簡単なのは、
  • に文字でアクセスする傾向があるか、またはに元の方法でアクセスする傾向があることである.