在 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
廣告