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

C++で同じ数字のセットを使用してNよりも小さい最大数を検索します


この問題では、数値を表す文字列Nが与えられます。私たちのタスクは、同じ数字のセットでNよりも小さい最大数を見つけることです。

問題の説明: Nよりも小さい最大の数である、与えられた数のすべての桁を使用して数を見つける必要があります。

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

入力: N =“ 54314”

出力: 54341

ソリューションアプローチ

この問題の簡単な解決策は、移動できる数字の桁を見つけて、最大の小さい数字を見つけることです。さて、目的を解決するためには、その数は正しい成功よりも大きいはずです。

このために、数字の形式を右から左にトラバースして、最後の要素よりも大きい要素を見つけます。

次に、右側のサブ配列で最大の要素を見つけて、それを現在の要素に置き換えます。ソート後、サブ配列は降順です。これはあなたの最大の小さな要素になります。

ソリューションの動作を説明するプログラム

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

void calcGreatestSmallerElement(string N, int size) {
   
   int i, j;
   for (i = size - 1; i > 0; i--)
      if (N[i] < N[i - 1])
         break;

   if (i == 0) {
      cout << "Previous number is not possible";
      return;
   }

   int x = N[i - 1], greatest = i;
   for (j = i; j < size; j++)
      if (N[j] < x && N[j] > N[greatest])
         greatest = j;

   swap(N[greatest], N[i - 1]);
   sort(N.begin() + i, N.begin() + size, greater<char>());

   cout<<"The Greatest smaller number with same set of digits is "<<N;

   return;
}

int main() {
   
   string N = "654232";
   int size = N.length();
   cout<<"The number is "<<N<<endl;
   calcGreatestSmallerElement(N, size);

   return 0;
}

出力

The number is 654232
The Greatest smaller number with same set of digits is 654223

  1. C++で指定された数以下の最大の特殊素数を検索します

    数nがあるとします。 N以下の最大の特別な素数を見つける必要があります。特別な素数は数字であり、数字を次々に配置することで作成できるため、結果の数字はすべて素数になります。 ここでは、エラトステネスのふるいを使用します。数nまでのふるい配列を作成します。次に、数が素数であるかどうかを確認することにより、数Nから繰り返し開始します。これが素数の場合、これが特別な素数であるかどうかを確認します。 例 #include<iostream> using namespace std; bool isSpecialPrime(bool sieve[], int num) {   &

  2. C++でDで割り切れるN桁の数値を検索します

    NとDの2つの数があるとします。Dで割り切れるN桁の数を見つける必要があります。Nが3で、Dが5の場合、数は500になります。これは簡単に解決できます。 Dが10でNが1の場合、それは不可能です。 Dを入れて、Dの桁数がmであると仮定し、N – m個の0を付けて、N桁の数でDで割り切れるようにします。 例 #include<iostream> using namespace std; string nDigitDivByD(int n, int d) {    string ans = "";    if (d <