プログラミング入門II 演習課題 2019.06.10

Back to text page


演習課題

  1. 並べ替え

    Webテキストで説明していた5つの数字の並べ替えを実際に行うプログラムを作成しましょう.

     85  92   3 100  69 
    100  92  85  69   3 
    

  2. 日付

    1〜365の整数を乱数により1つ発生させ,それを今年の元旦からの日数とするとき,それが何月何日かを答えるプログラムを作ってみましょう.1が出たら1月1日,365が出たら12月31日とします.

    次に示す配列を利用すると,簡単になります.

    	int month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    

    Day 304 of 2019
    Month: 10, Date: 31
    

    出てきた日数からどこまで配列要素を引くことができるかで月が決まります.日にちの方は前の月までの総日数を引き去ることで求まります.

    日付があっているかどうかの確認は乱数では難しいので,変数の値を決め打ちして実行する方が確実です.例えば,32は2月1日で,60は3月1日とか,365は12月31日とかですかね.
    解答例

  3. 重複のない乱数発生

    0から9までの整数を10個ランダムな順番に発生させますが,数字の重複が無いように1回ずつ出てくるように発生させてください.

    8 2 4 9 0 6 3 7 5 1
    

    	int num[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    

    という配列を用意して要素をランダムに並べ直すことで実現できます.
    解答例

  4. カプレカ数

    コミックの「はじめアルゴリズム」の第1巻で紹介されている「カプレカ数」の探索を行ってみましょう.4桁の正の整数を乱数により発生させ,その数に含まれる数字を大きい順に並べ替えたものと小さい順に並べ替えたものを作ります.そして,大きい数から小さい数を引いて,その答えの数も同様に大きい順と小さい順に並べ替えて引き算する,ということを繰り返すと,必ずある数に収束するというもので,その収束した数をカプレカ数と言います.

    Original number: 5182
    8521 - 1258 = 7263
    7632 - 2367 = 5265
    6552 - 2556 = 3996
    9963 - 3699 = 6264
    6642 - 2466 = 4176
       ・
       ・
       ・
    
    

    手順はおよそ以下のようになります.
    1.4桁の乱数発生
    2.位取りにより各桁の4つの整数を分離して配列に入れる
    3.配列の要素の並べ替え
    4.2個の4桁の整数合成
    5.一つ前の整数と同じか?
    6.引き算
    7.2.の作業に戻る
    
    解答例


Back to text page