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

C++で同じ数字のセットで次に大きい数を検索します


この問題では、要素Nが与えられます。同じ数字のセットで次に大きい数字を見つける必要があります。同じ桁でNより大きい最小の数を見つける必要があります。

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

入力

N = "92534"

出力

92543

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

次に大きな要素を見つけるための問題の簡単な解決策は、次のアプローチによるものです-

  • 数値を最下位ビットから最上位ビットにトラバースします。そして、現在の要素が最後の要素よりも小さいときに停止します。

  • この後、残りの配列で最小の要素を検索します。そして、最小の番号を見つけて、その番号と交換します。

  • 次に、残りのサブアレイを並べ替えて、出力を返します。

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

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
void findNextGreater(char number[], int n) {
   int i, j;
   for (i = n-1; i > 0; i--)
      if (number[i] > number[i-1])
         break;
   if (i==0) {
      cout<<"Next number is not possible";
      return;
   }
   int x = number[i-1], smallest = i;
   for (j = i+1; j < n; j++)
      if (number[j] > x && number[j] < number[smallest])
         smallest = j;
   char temp = number[smallest];
   number[smallest] = number[i-1];
   number[i-1] = temp;
   sort(number + i, number + n);
   cout<<number;
   return;
}
int main(){
   char number[] = "92534";
   int n = strlen(number);
   cout<<"The next number with same set of digits is ";
   findNextGreater(number, n);
   return 0;
}

出力

The next number with same set of digits is 92543

  1. C++で指定された数より大きい次の完全な正方形を見つけます

    数nがあるとします。私たちの仕事は、nの次の完全な平方数を見つけることです。したがって、数値n =1000の場合、次の完全な平方数は1024=322です。 これを解決するために、与えられた数nの平方根を取得し、その平方根を取得します。その後、(床の値+ 1)の平方根を表示します 例 #include<iostream> #include<cmath> using namespace std; int justGreaterPerfectSq(int n) {    int sq_root = sqrt(n);    return

  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 <