在 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

更新日期: 2021 年 3 月 13 日

1K+ 檢視量

開啟 職業生涯

完成課程,獲得認證

開始學習
廣告
© . All rights reserved.