TIL 26|プラス記号期間(標準1110 python)



コード解析


正しいコード

# 자료 입력
N = int(input())

# 문제 풀이
check = N 
temp = 0
new_N = 0
cycle_count = 0

while True:
    temp = (N//10) + (N%10) -----------------(1)
    new_N = (N % 10)*10 + (temp % 10)
    cycle_count += 1
    N = new_N -------------------------------(2)
    if new_N == check: ----------------------(3)
        break

print(cycle_count)
(1)入力値を10ビットと1ビットに分ける.
(2)Nの値はnewNで上書きされるので,check変数が必要である.
(3)計算された値が最初に入力された値と同じである場合、重複文を終了する.

エラーコードとその他のメソッドの解決

# 자료 입력
N = int(input())

# 문제 풀이
temp = 0
new_N = 0
cycle_count = 0

while True:
    temp = (N//10)+(N % 10) 
    new_N = (N % 10)*10 + (temp % 10)
    cycle_count += 1
    if N == new_N:
        break

print(cycle_count)
  • ビットコードにタイムアウトが発生しました.
  • (理由)は、while文に変数Nを更新する部分がないため、同じ数字のみを使用して重複文を実行します.
  • (補足)N更新のコードを繰り返し文に含め、Nとnew Nを照合するために変数を追加し、通過できます.
  • Googleの質問の答えを見ていると、最初はcheck変数を単独で置いた理由が理解できませんでしたが、直接問題に遭遇すると、コードライターの意図が理解できます.これは有意義なシャベルです!
  • import sys
    
    n= str(input())
    check = n
    cnt = 0
    
    while True:
        sum = 0
        for char in n:
            sum += int(char)
        new_num = n[-1]+str(sum)[-1]
        cnt +=1
        if new_num == check:
            print(cnt)
            break
        else:
            n = new_num
    
    

    参考資料


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