在 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

更新於: 2021年1月25日

260 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告