【CPE一顆星選集】UVA299 – Train Swapping【C++】

C++

SWAPで数字の並び替え

今回の問題はUVA299です。

Online Judge
Online Judge

数字の列を入力されて、それらを昇順に並べたときに何回SWAP(入れ替え)したかを数える問題です。

サンプルコード(GitHub)

cpe/一顆星/uva299/01.cpp at main · mintson0517/cpe
Contribute to mintson0517/cpe development by creating an account on GitHub.

コードの解説

今回の数字の列を配列のvectorで処理することにしました。

vector<int> numbers(L);

for (int i = 0; i < L; i++) {
            cin >> numbers[i];
        }

これによりnumbers配列の中に数字を一個ずつ入力されました。

int swaps = 0;
        for (int i = 0; i < L - 1; i++) {
            for (int j = 0; j < L - i - 1; j++) {
                if (numbers[j] > numbers[j + 1]) {
                    swap(numbers[j], numbers[j + 1]);
                    swaps++;
                }
            }
        }

小順に並べるために今回はバブルソートというアルゴリズムを使用します。
まず{5, 3, 8, 4, 2}配列を並べ直すとき、まずは配列の前後で大きければswapで入れ替え
→(if(numbers[j] > numbers[j + 1]))  swap(numbers[j], numbers[j + 1]);

swapを使用するには#nclude <algorithm>が必要です!

それをforループで徐々に並び直していけば完了します。
最初の並び替えで8は一番後ろに行きます。
2回目は5が後ろから二番目に、みたいな感じです。

タイトルとURLをコピーしました