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

C++で指定された数の最小の順列を見つける


この問題では、多数のNが与えられます。私たちのタスクは、与えられた数の最小の順列を見つけることです。

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

入力

N = 4529016

出力

1024569

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

この問題の簡単な解決策は、長整数値をastringに格納することです。次に、結果である文字列を並べ替えます。ただし、先行するゼロがある場合は、最初のゼロ以外の値の後にシフトします。

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

#include <bits/stdc++.h>
using namespace std;
string smallestNumPer(string s) {
   int len = s.length();
   sort(s.begin(), s.end());
   int i = 0;
   while (s[i] == '0')
      i++;
   swap(s[0], s[i]);
   return s;
}
int main() {
   string s = "4529016";
   cout<<"The number is "<<s<<endl;
   cout<<"The smallest permutation of the number is "<<smallestNumPer(s);
   return 0;
}

出力

The number is 4529016
The smallest permutation of the number is 1024569

  1. n XOR n+1がC++で指定されたkと等しくなるような最小数nを見つけます

    正の数kがあるとします。 nとn+1のXORがkと同じになるように、正の数nを見つける必要があります。したがって、k =7(111)の場合、出力は3になります。3(011)、3 + 1 =4(100)として、011 XOR 100 =111(7) 考えられるケースは2つあります。 nが偶数であると考えてください。 n=0の最後のビット。次にn+1=1の最後のビット。残りのビットは同じです。したがって、nが奇数の場合、XORは1になり、最後のビットは1になり、n + 1ビットの最後のビットは0になります。ただし、この場合、キャリーによって異なるビットが増えます。キャリーは、最初の0ビットを取得

  2. 与えられた文字列の順列の数を見つけるためのC++プログラム

    文字列の文字をさまざまな順序で並べることができます。ここでは、特定の文字列から形成できる順列の数をカウントする方法を説明します。 1つの文字列が「abc」の場合はわかります。 3つの文字があります。 3つにアレンジできます! =6つの異なる方法。したがって、n文字の文字列は、nに配置できます。違う方法。しかし、aabのように同じ文字が複数回存在する場合、6つの順列はありません。 aba aab baa baa aab aba ここで、(1,6)、(2、5)、(3,4)は同じです。したがって、ここでは順列の数は3です。これは基本的に(n!)/(複数回発生しているす