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
-
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
-
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 <