【C++】配列の要素を逆順に並べ替える

配列の要素 a[i] と a[(N-1)-i] を入れ替えるという処理をN/2回繰り返すという方針で実装する。
※ N は配列の要素数

#include <iostream>
using namespace std;

int main() {
  int N;
  cin >> N;
  int a[110];
  for (int i = 0; i < N; ++i) {
    cin >> a[i];
  }

  int tmp;
  for (int i = 0; i < N/2; ++i) {
    tmp = a[i];
    a[i] = a[(N-1)-i];
    a[(N-1)-i] = tmp;
  }

  for (int i = 0; i < N; ++i) {
    cout << a[i] << ' ';
  }
  cout << endl;

  return 0;
}

例えば、
        5
        1 2 3 4 5
を入力すると
        5 4 3 2 1
が出力される。
※入力の最初の1回は配列の要素数を入力する。

swap()関数を用いると、次のように書ける。

#include <iostream>
#include <utility>
using namespace std;

int main() {
  int N;
  cin >> N;
  int a[N];
  for (int i = 0; i < N; ++i) {
    cin >> a[i];
  }

  for (int i = 0; i < N/2; ++i) {
    swap(a[i], a[(N-1)-i]);
  }

  for (int i = 0; i < N; ++i) {
    cout << a[i] << ' ';
  }
  cout << endl;

  return 0;
}

reverse()関数を用いると、次のようにも書ける。

#include <iostream>
#include <algorithm>
using namespace std;

int main() {
  int N;
  cin >> N;
  int a[N];
  for (int i = 0; i < N; ++i) {
    cin >> a[i];
  }

  reverse(a,a+N);

  for (int i = 0; i < N; ++i) {
    cout << a[i] << ' ';
  }
  cout << endl;

  return 0;
}

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