プログラミング追加分課題2005/5/30
順位付けのプログラムを作る。J1問題のデータを使う。
勝ち点による順位を配列juni1に格納し、表示する。
データは勝ち点順に並んでいるので直前の勝ち点と現在の勝ち点を比較すれば順位を判定できる。このとき、直前までと同じ順位が何チームいるかを考慮する。
たとえば、8チームの勝ち点が配列Xに次の表にように入っていると、順は次の表のようになる。
X[] | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
勝ち点 | 20 | 20 | 19 | 17 | 17 | 17 | 15 | 14 |
juni1[] | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
順位 | 1 | 1 | 3 | 4 | 4 | 4 | 7 | 8 |
- 同じ勝ち点の時は同順位
- 同順位が何チームあるかで次の順位が決まる
得点による順位を配列juni2に格納し、表示する(その1)
- 2重ループを使う
- 全要素に対し次の処理を繰り返すループ
- 一つの要素の順位を求めるループ
各要素の順位=配列全体の中に自分の要素の値より大きい値の個数+1
得点による順位を配列juni2に格納し、表示する(その2)
データは勝ち点順に並んでいるので得点順とは異なる並びになっている。
たとえば、得点が次のように格納されている場合を考える。
X[] | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
得点 | 17 | 23 | 19 | 15 | 15 | 14 | 23 | 14 |
次の処理を実施すればよい。
- 順位を格納する配列の初期値を0にする。
- 最高得点を探し、該当する配列に順位1を代入する。
- 同一順位が複数あればその数をカウントしておく。
- 次の順位は現在の順位に同一順位数を加算した値にする。
- 順位を代入できるのは値が0の配列要素のみ
- 上記と同様の処理を繰り返す。
この処理による順位の移り変わりを以下に示す。
juni2[] | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
順位1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
順位2 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
順位3 | 0 | 1 | 3 | 0 | 0 | 0 | 1 | 0 |
順位4 | 4 | 1 | 3 | 0 | 0 | 0 | 1 | 0 |
順位5 | 4 | 1 | 3 | 5 | 5 | 0 | 1 | 0 |
順位6 | 4 | 1 | 3 | 5 | 5 | 7 | 1 | 7 |