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

C ++ですべての桁が区別されるように、指定された数値よりも厳密に小さい数値を出力します


この問題では、番号nが与えられます。私たちの仕事は、すべての桁が区別できるように、n未満の最大数を印刷することです。

問題を理解するために例を見てみましょう

Input: n = 2332
Output: 2319

この問題を解決するために、数値のカウントを逆にします。つまり、nから0になります。そして、現在のカウント値が条件を満たしている場合は、数字が異なる数値をチェックして、出力してループを終了します。それ以外の場合は、ループを続行します。ループが実行される最大回数は常にn未満です。

ソリューションを実装するためのプログラム

#include <bits/stdc++.h>
using namespace std;
int findDistinctDigitNumber(int n) {
   for (int i = n - 1; i>=0 ; i--) {
      int count[10] = { 0 };
      int x = i;
      int count1 = 0, count2 = 0;
      while (x) {
         count[x % 10]++;
         x /= 10;
         count1++;
      }
      for (int j = 0; j < 10; j++) {
         if (count[j] == 1)
            count2++;
      }
      if (count1 == count2)
      return i;
   }
}
int main() {
   int n = 44324;
   cout<<"Number less than "<<n<<" with all digits distinct are : "<<findDistinctDigitNumber(n);
   return 0;
}

出力

Number less than 44324 with all digits distinct are : 43987

  1. C++の最小ヒープの値x未満のすべてのノードを出力します

    この問題では、最小ヒープが与えられます および値x x未満のすべてのノードを印刷する必要があります。 最小ヒープ は、すべてのノードの値が子ノードのノード値よりも小さい特殊なタイプの二分木です。 問題を理解するために例を見てみましょう- X =45 出力- 2 4 7 10 17 22 33 34 ここで、この問題を解決するには、最小ヒープ全体のプレオーダートラバーサルを実行し、指定された値X未満の値のみを出力する必要があります。ノードの値がxより大きい場合、トラバースは行われません。そこの子ノードの値はxより大きくなります。最小ヒープのプレオーダートラバーサルを実行す

  2. C++を使用してすべての要素が割り切れるような配列要素を見つけます

    要素が少ない配列Aがあるとします。すべての要素をそれで分割できるように、Aから要素を見つける必要があります。 Aが[15、21、69、33、3、72、81]のようであるとすると、すべての数値は3で割り切れる可能性があるため、要素は3になります。 この問題を解決するために、Aの最小の数値を取得し、すべての数値を最小の数値で除算できるかどうかを確認します。はいの場合は数値を返し、そうでない場合はfalseを返します。 例 #include<iostream> #include<algorithm> using namespace std; int getNumber(in