このページについて
このページは、paiza ラーニング内に開設されているコンテンツ「レベルアップ問題集」で取り扱われているプログラミング課題について、独自の見解を述べたものです。
見解については、paizaラーニングの規約に基づき、許可されている範囲でのみ公開していますが、その内容については paiza とは一切関係なく、また paiza の立場を反映したものではありませんのでご注意ください。
挑戦する課題
レベルアップ問題集のCランクレベルアップメニューから「シミュレーションの練習 (paizaランク C 相当)」を取り上げます。
以下は、問題公開 Web ページからの引用です。
問題
パイザ君と霧島京子は最初どちらも数 1 をもっています。パイザ君は自分の番が来ると、自分のもっている数の a 倍を霧島京子の数に足してあげます。霧島京子は自分の番が来ると、自分のもっている数を b で割った余りをパイザ君の数に足してあげます。この手続きをパイザ君の番から始めて、霧島京子の数がnより大きくなるまで繰り返します。
手続きが終わったときのパイザ君の操作回数を求めてください。
入力される値
入力は以下のフォーマットで与えられます。
1 2 |
n a b |
- 1 行目には整数 n が与えられ、 2 行目には a, b が半角スペース区切りで与えられます。
期待する出力
答えを行で出力してください。
末尾に改行を入れ、余計な文字、空行を含んではいけません。
考え方
難しい問題ではないが、終了条件に注意。「nより大きくなる」なので k <= n が繰り返す条件となる。
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
// 上限 N var n = Int(readLine()!)! // 係数など let ia = readLine()!.split(separator: " ").map { Int($0)! } // パイザくんの倍率 var a = ia[0] // 霧島京子の割る数 var b = ia[1] // パイザくん、霧島京子の初期値 var p = 1 var k = 1 var i = 0 while k <= n { k += p * a i += 1 p += k % b } print(i) |