アルゴリズム解答:数桁加算サイクル


質問リンク


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

計画と考え


問題はこうです.
0以上99以下の整数を指定すると、次の演算が可能になります.与えられた数字が10より小さい場合は、前に0を加えて2桁にし、各桁の数字を加える.そして,与えられた数字の右端桁を先に求めたプロトコルの右端桁に加算することで,新しい数字を生成することができる.
まずそう思う
  • 変数xには、所与の数の最後のビット数が格納される.
  • は、別の変数yにおいて与えられた各ビット数の数値を記憶する.
  • x*10+y%10が新しい与えられた数になります.
  • 例えば、26が与えられた数であれば、x=6、y=8であるため、第1サイクル後の新たな与えられた数は68である.
    そうすると、ループが終わるたびにカウンタに1を追加します.
    c+=1

    に答える

    m=-1 # 주어진 수를 변환한 값을 저장해서 처음 입력한 수와 동일한지 비교할 변수. 초깃값은 0부터 99 사이의 주어진 수와 항상 다르도록 지정
    c=0 # 카운터의 초깃값 
    n = eval(input("정수를 입력하시오: "))
    m1=n
    
    while m!=n: 
    
        x1 = m1%10 #앞자릿수는 처음 수의 뒷자릿수
        # 뒷자릿수는 각 자릿수를 더한 값의 가장 오른쪽자릿수 
        y1 = ((int(m1/10))+(m1%10))%10
        m1=(x1*10+y1) 
        c+=1
        m=m1
        #print(m,c)
    print(c)

    ふさぐ


    問題を解決すること自体は難しくない.最大の困難は問題を読み間違えたことだ.
    与えられた数字が10より小さい場合は、前に0を加えて2桁にし、各桁の数字を加える.
    これを「ポストゼロ」と誤認して2桁に加算し、一時混乱に陥った.
    問題例によれば、26入力後、4、55入力後、3、1入力後、60回終了した結果を出力する.
    入力26の結果出力は難しくありません.

    中間プロシージャをチェックするために,すべての演算プロシージャが出力され,結果を最終結果のみが出力されるように変更すればそうである.

    入力55はどうすればいいですか?
    まず5+5=10、次いで5と0、最初に与えられた数は50です.
    そして5+0=5なので、0と5に続き、2番目に与えられた数は5です.
    最後に、0+5は5であるので、続いて5と5であり、3番目に与えられた数は55であり、演算は終了する.

    士族:百駿ネットの低級サイトで答えを入力し、採点を受ける


    完成したコードを他のコードテスト採点サイトのように関数形式に変換し、上の採点サイトに提出した結果、エラーが表示され続けた.
    def adding_cycle(n):
        m=-1
        c=0
        m1=n
        while m!=n: 
            x1 = m1%10 #앞자릿수는 처음 수의 뒷자릿수
            # 뒷자릿수는 각 자릿수를 더한 값의 가장 오른쪽자릿수 
            y1 = ((int(m1/10))+(m1%10))%10
            m1=(x1*10+y1) 
            c+=1
            m=m1
        return c
    そのサイトで解題の入力方法がよく分からないようですが...先に提出した方法をもう一度見てください.

    すなわち、入力は「1行目」で機能し、2行目は結果を出力する形で行うべきである.
    1行目に「整数を入力してください:」などが表示されない場合は、カーソルが1つあれば数字を入力でき、入力後2行目に結果が必要です.
    コードをそのまま再入力します.
    m=-1 # 주어진 수를 변환한 값을 저장해서 처음 입력한 수와 동일한지 비교할 변수. 초깃값은 0부터 99 사이의 주어진 수와 항상 다르도록 지정
    c=0 # 카운터의 초깃값 
    #n = eval(input("정수를 입력하시오: "))
    n = eval(input(""))
    m1=n
    
    while m!=n: 
    
        x1 = m1%10 #앞자릿수는 처음 수의 뒷자릿수
        # 뒷자릿수는 각 자릿수를 더한 값의 가장 오른쪽자릿수 
        y1 = ((int(m1/10))+(m1%10))%10
        m1=(x1*10+y1) 
        c+=1
        m=m1
        #print(m,c)
    print(c)
    そして正しいと評価された.ははは