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

要素が正の整数で、C++では合計がKであるサイズNの配列の数


nとkの2つの数が与えられます。合計がkであるn個の数を使用して形成できる配列の数を見つける必要があります。

合計KのサイズNの配列の数は、$ \ dbinom {k-1}{n-1}$です。

これは、合計がkであるn個の要素を使用して形成できる数の配列を見つけるための簡単な式です。例を見てみましょう。

入力

n = 1
k = 2

出力

1

形成できる唯一の配列は[2]

です。

入力

n = 2
k = 4

出力

3

形成できるアレイは、[1、3]、[2、2]、[3、1]です。

アルゴリズム

  • 番号nとkを初期化します。
  • 数値の階乗を計算する関数を記述します。
  • 次に、上記のように二項式を計算するためのメイン関数を記述します。
  • 答えを返します。

実装

以下は、C++での上記のアルゴリズムの実装です

#include <bits/stdc++.h>
using namespace std;
int factorial(int n) {
   int result = 1;
   for (int i = 2; i <= n; i++) {
      result *= i;
   }
   return result;
}
int getNumberOfArraysCount(int n, int k) {
   return factorial(n) / (factorial(k) * factorial(n - k));
}
int main() {
   int N = 5, K = 8;
   cout << getNumberOfArraysCount(K - 1, N - 1) << endl;
   return 0;
}

出力

上記のコードを実行すると、次の結果が得られます。

35

  1. Xとの合計がC++のフィボナッチ数であるノードをカウントします

    ノードの重みを数値として持つ二分木を指定します。目標は、その数がフィボナッチ数であるような重みを持つノードの数を見つけることです。フィボナッチ数列の数は次のとおりです。0、1、1、2、3、5、8、13…。n番目の数はの合計です。 (n-1)番目と(n-2)番目。重みが13の場合、それはフィボナッチ数であるため、ノードがカウントされます。 例 入力 temp=1。値を入力した後に作成されるツリーを以下に示します- 出力 Count the nodes whose sum with X is a Fibonacci number are: 3 説明 we are given with

  2. 合計とGCDがC++で与えられている2つの数値を見つけます

    2つの数aとbの合計とgcdがあります。数字aとbの両方を見つける必要があります。それが不可能な場合は、-1を返します。合計が6でgcdが2であるとすると、数値は4と2になります。 このアプローチは、GCDが与えられると、その数がその倍数になることが知られているようなものです。次の手順があります 最初の数値をGCDとして選択すると、2番目の数値はsum − GCDになります。 前の手順で選択した数値の合計が合計と同じである場合は、両方の数値を出力します。 それ以外の場合は、数値が存在しないため、-1を出力します。 例 #include <iostream>