C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

n個のピークを持つ順列を見つけるC++プログラム


nとkの2つの数があるとします。正確にk個のピークを持つ1からnまでの数を使用して順列Aを構築する必要があります。 A [i]>A[i-1]およびA[i]>A [i + 1]の場合、インデックスiは配列Aのピークであると言われます。これが不可能な場合は、-1を返します。

したがって、入力がn=5のような場合。 k =2の場合、出力は[2、4、1、5、3]になり、他の回答も可能です。

ステップ

これを解決するには、次の手順に従います-

if k > (n - 1) / 2, then:
   return -1
Define an array a of size: 101.
for initialize i := 1, when i <= n, update (increase i by 1), do:
   a[i] := i
for initialize i := 2, when i <= 2 * k, update i := i + 2, do:
   swap a[i] and a[i + 1]
for initialize i := 1, when i <= n, update (increase i by 1), do:
   print a[i]

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;

void solve(int n, int k) {
   if (k > (n - 1) / 2) {
      cout << "-1";
      return;
   }
   int a[101];
   for (int i = 1; i <= n; i++)
      a[i] = i;
   for (int i = 2; i <= 2 * k; i += 2) {
      swap(a[i], a[i + 1]);
   }
   for (int i = 1; i <= n; i++)
      cout << a[i] << ", ";
}
int main() {
   int n = 5;
   int k = 2;
   solve(n, k);
}

入力

5, 2

出力

1, 3, 2, 5, 4,

  1. GCDを見つけるためのC++プログラム

    2つの数値の最大公約数(GCD)は、両方を除算する最大の数値です。 例:45と27の2つの数字があるとします。 45 = 5 * 3 * 3 27 = 3 * 3 * 3 したがって、45と27のGCDは9です。 2つの数値のGCDを見つけるプログラムは次のとおりです。 例 #include <iostream> using namespace std; int gcd(int a, int b) {    if (b == 0)    return a;    return gcd(b, a % b); } int

  2. 階乗を見つけるためのC++プログラム

    非負の整数nの階乗は、n以下のすべての正の整数の積です。 例:5の階乗は120です。 5! = 5 * 4 * 3 * 2 *1 5! = 120 整数の階乗は、再帰プログラムまたは非再帰プログラムを使用して見つけることができます。これらの両方の例を以下に示します。 非再帰プログラムを使用した階乗 forループを使用して、数値の階乗を見つけることができます。これは、次のプログラムを使用して示されます- 例 #include <iostream> using namespace std; int main() {    int n = 5, fact = 1