C++で配列の要素をその場(インプレース)で反転するプログラム
問題概要
n個の異なる要素からなる配列が与えられたとき、配列内の要素を反転して表示するプログラムを作成します。ここでのポイントは、単に逆順に表示するだけではなく、配列自体の要素をその場(インプレース)で入れ替えることです。
例として、入力が n = 9、arr = [2,5,6,4,7,8,3,6,4] の場合、出力は [4,6,3,8,7,4,6,5,2] となります。
アルゴリズム
この問題は、以下の手順で解くことができます。
- i を 0 から n/2 未満まで 1 ずつ増やしながら、以下を繰り返します。
- temp に arr[i] の値を退避する
- arr[i] に arr[n - i - 1] を代入する
- arr[n - i - 1] に temp を代入する
- i を 0 から n 未満まで 1 ずつ増やしながら、arr[i] を表示します。
この手法では、配列の先頭と末尾から順にペアとなる要素を交換していくため、別の配列を用意する必要がなく、空間計算量 O(1) で反転を実現できます。時間計算量は O(n) です。
C++による実装例
#include <iostream>
using namespace std;
int main(){
int n = 9;
int arr[n] = {2,5,6,4,7,8,3,6,4};
int temp;
for(int i = 0; i<n/2; i++){
temp = arr[i];
arr[i] = arr[n-i-1];
arr[n-i-1] = temp;
}
for(int i = 0; i < n; i++){
cout << arr[i] << " ";
}
}入力
9, {2,5,6,4,7,8,3,6,4}出力
4 6 3 8 7 4 6 5 2
-
C++で配列がビトニック配列かどうかを判定するプログラム
N個の整数からなる配列 arr[N] が与えられたとき、その配列がビトニック配列であるかどうかを判定するのが本記事のテーマです。ビトニック配列であれば「Yes its a bitonic array」と出力し、そうでなければ「No its not a bitonic array」と出力します。ビトニック配列とは、まず厳密に増加し、その後厳密に減少するような配列のことです。たとえば arr[] = {1, 2, 3, 4, 2, -1, -5} という配列は、4までは厳密に増加しており、4以降は厳密に減少しているため、ビトニック配列といえます。入力例と出力例入力arr[] = {1, 3, 5,
-
配列の全要素を乗算するC++プログラムの解説
整数型の要素を持つ配列が与えられたとき、配列内のすべての要素を掛け合わせ、その積を表示することを考えます。本記事では、この問題をC++(C言語スタイルのコード)で解く方法を、アプローチ、アルゴリズム、サンプルコード、実行結果まで順を追って解説します。 例 入力: arr[]={1,2,3,4,5,6,7} 出力: 1 x 2 x 3 x 4 x 5 x 6 x 7 = 5040 入力: arr[]={3, 4, 6, 2, 7, 8, 4} 出力: 3 x 4 x 6 x 2 x 7 x 8 x 4 = 32256 解き方のアプローチ この問題は、累積用の一時変数を用意し、配列の要素を先頭