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

C++のM桁から形成される5で割り切れるN桁の数値


M桁の配列とともに数値Nを指定しました。私たちの仕事は、5で割り切れる与えられたM桁から形成されたn桁の数を見つけることです。

問題の入力と出力を理解するために、いくつかの例を見てみましょう。

で-

N = 2
M = 3
arr = {5, 6, 3}

アウト-

2

5で割り切れる2つのN桁の数字35と65があります。別の例を見てみましょう。

入力-

N = 1
M = 7
arr = {2, 3, 4, 5, 6, 7, 8}

出力-

1

与えられた配列には、5で割り切れる1桁の数が1つしかないので、私たちのタスクは、5で割り切れるN桁の与えられた数から形成できる数を見つけることです。

5で割り切れるには、数字の0または5で終わる必要があります。アルゴリズムを見てみましょう

アルゴリズム

  • 指定された配列の0と5を確認します。 2. 0と5の両方がある場合、単位の場所に数字を配置する方法は2つあります。それ以外の場合は、数字を配置する単一の方法があります。
    • カウントを2に初期化します。
    • これで、残りの場所には、それぞれm-1、m-2、m-3、...n個の方法で埋めることができます。
    • 0からn-1まで繰り返すループを記述します。
      • 配列のそのサイズをデクリメントします。
      • カウントを掛けます。
  • 0または5の数字が1つある場合、単位の場所に数字を配置する方法は1つだけです。
    • カウントを2に初期化します。
    • これで、残りの場所には、それぞれm-1、m-2、m-3、...n個の方法で埋めることができます。
    • 0からn-1まで繰り返すループを記述します。
      • 配列のそのサイズをデクリメントします。
      • カウントを掛けます。
  • 0または5の数字がない場合は、5で割り切れる数を作成できます。その場合は-1を返します。

実装

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

#include <bits/stdc++.h>

using namespace std;

int numbers(int n, int m, int arr[]) {
   bool isZeroPresent = false, isFivePresent = false;
   int numbersCount = 0;
   if (m < n) {
      return -1;
   }
   for (int i = 0; i < m; i++) {
      if (arr[i] == 0) {
         isZeroPresent = true;
      }
      if (arr[i] == 5) {
         isFivePresent = true;
      }
   }
   if (isZeroPresent && isFivePresent) {
      numbersCount = 2;
      for (int i = 0; i < n - 1; i++) {
         m--;
         numbersCount = numbersCount * m;
      }
   } else if (isZeroPresent || isFivePresent) {
      numbersCount = 1;
      for (int i = 0; i < n - 1; i++) {
         m--;
         numbersCount = numbersCount * m;
      }
   } else {
      return -1;
   }
   return numbersCount;
}
int main() {
   int arr[] = {5, 6, 3};
   cout << numbers(2, 3, arr) << endl;
   return 0;
}

出力

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

2

  1. C++での桁の合計に従って数値を並べ替えます

    このセクションでは、数字の合計に従って数値を並べ替える方法を説明します。したがって、数字の桁数が少ない場合は、最初に配置され、次に数字の合計が大きい数字が配置されます。 data = {14, 129, 501, 23, 0, 145} 並べ替えると、-になります。 data = {0, 14, 23, 501, 145, 129} ここでは、それらを並べ替えるための独自の比較ロジックを作成します。その比較ロジックは、C++STLの並べ替え関数で使用されます。 アルゴリズム compare(num1, num2): Begin    if sum of digits o

  2. Xで割り切れる最大のK桁の数値のC++プログラム?

    2つの整数XとKが与えられます。 Kは整数の桁数です。論理は、Xで割り切れる最大のK桁の数字を見つけることです。 Input: X = 30, K = 3 Output: 980 説明 980は、30で割り切れる最大の3桁の数値です。Kを10の累乗として、1を引くと、最大のK桁の数値が得られます。その後、最大の数値を取得しようとします。これはXで除算されます。 例 #include <iostream> #include <math.h> using namespace std; int main() {    int X = 20;