C++で配列要素を交互に昇順と降順で出力します
この問題では、番号の配列が与えられ、印刷中に配列の要素を交互に昇順と降順で印刷する必要があります。代替の順序は、最初の2つの要素が昇順で、次の3つの要素が降順で、次の4つの要素が昇順になるようになります。
問題をよりよく理解するために例を見てみましょう。
Input : {1, 4, 0, 2, 7, 9, 3} Output : 0 1 9 7 4 2 3
説明 −要素の昇順の配列は0 1 2 3 4 79です。最初の2つの要素は01です。最後の3つの要素は974です。次の44つの要素は23です(4つの要素を取ることができますが、アレイ内に2つだけ)。
この問題を解決するために、最初に配列を昇順でソートします。ここで、2つのポインターを使用します。1つは最初から要素を印刷するためのもので、もう1つは要素を最後まで印刷するためのものです。また、1つのフラグ要素を使用して、印刷を最初から行うか最後から行うかを確認します。
アルゴリズム
Step 1 : Sort elements of the array. Step 2 : Initialise left = 0 , right = n-1 , flag = 2. Step 3 : while l is less than equal to r. Do : Step 4 : If flag%2 == 0. Do : Step 4.1 : loop from i = left to left + flag. And print arr[i]. Step 4.2 : update left = i ; flag ++; Step 5 : else. Do : Step 5.1 : loop from i = right to right - flag. And print arr[i]. Step 5.2 : update right = i and flag ++. Step 6 : EXIT
例
それでは、このアルゴリズムの動作を説明するプログラムを作成しましょう。
#include <bits/stdc++.h> using namespace std; void printAlternateSeq(int arr[], int n){ sort(arr, arr + n); int left = 0, right = n - 1, flag = 2, i; while (left <= right) { if (flag%2 == 0) { for (i = left; i < left + flag && i <= right; i++) cout<<arr[i]<<" "; left = i; } else { for (i = right; i > right - flag && i >= left; i--) cout<<arr[i]<<" "; right = i; } flag++; } } int main(){ int n = 6; int arr[] = {23, 45, 78, 32, 89, 10 }; printAlternateSeq(arr, n); return 0; }
出力
10 23 89 78 45 32
-
C ++の配列内の偶数と奇数のインデックス付き要素の絶対差?
配列は、同じデータ型の複数の要素のコンテナです。要素のインデックスは0から始まります。つまり、最初の要素のインデックスは0です。 この問題では、2つの偶数のインデックス付き数値と2つの奇数のインデックス付き数値の絶対差を見つける必要があります。 インデックス付きの数値でも=0,2,4,6,8…。 奇数のインデックス番号=1,3,5,7,9… 絶対差は、2つの要素間の差の係数です。 たとえば、 15と7の絶対差=(| 15-7 |)=8 Input: arr = {1 , 2, 4, 5, 8} Output : Absolute difference of even number
-
配列内の偶数と奇数のインデックス付き要素の絶対差(C ++)?
ここでは、配列内の奇数と偶数のインデックス付き要素の絶対差を取得する方法を説明します。絶対差は、1つのペアの差が負の場合、絶対値が取られることを示します。たとえば、番号を{1、2、3、4、5、6、7、8、9}とします。したがって、偶数の位置の要素は1、3、5、7、9(0から開始)であり、奇数の場所の要素は2、4、6、8です。したがって、偶数の位置のデータの差は| 1〜3|です。 =2、次に| 2-5 | =3、| 3-7 | =4および|4-9| =5同様に、奇数の場所の差は4になります。 アルゴリズム offEvenDiff(arr、n) begin even :