[規格]1476-計算日(Python)



質問する


https://www.acmicpc.net/problem/1476

問題の説明


変数E,S,Mの範囲はそれぞれ異なるので,各変数の周期に集中して法則を見つけようとする.
いくつかの例を見てみましょう.
(E, S, M)
= (15, 2, 11) -> 30 = (E)15+15 = (S)28+2 = (M)19+11
= (12, 1, 19) -> 57 = (E)15+15+15+12 = (S)28+28+1 = (M)19+19+19
太字を読むことに集中すれば、法則が見つかるはずだ.
どうしても表現しなければならないなら、次のように表現できるようです.
# e, s, m은 정수
(15*e)+E = (28*s)+S = (19*m)+M

コミットコード

E, S, M = map(int, input().split())
year = 1

while True:
    if ((year-E) % 15 == 0) and ((year-S) % 28 == 0) and ((year-M) % 19 == 0):
        break 
    year += 1

print(year)

結果



整理する


コンセプト

  • ルーティング転送アルゴリズム:完全検索アルゴリズム.すなわち,可能な限り要求条件を満たすすべての数のみを検索する.
    +)brute:無知、force:力「無知の力」アルゴリズム.
  • コメント付きコード

    # E: 1-15 / S: 1-28 / M: 1-19
    
    # 입력받기
    E, S, M = map(int, input().split())
    year = 1
    
    while True:
        if ((year-E) % 15 == 0) and ((year-S) % 28 == 0) and ((year-M) % 19 == 0):
            break
        # if 문에 해당하지 않을 때는 year에 1을 더해준다
        year += 1
    
    # 결과값 출력
    print(year)
    

    に感銘を与える


    ルールを見つけましたが、コードにする過程でブロックされました.想像以上に簡単にコードが書けることを知り、不思議に思った.ほほほ