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

C++での単調増加桁数


非負の整数Nがあるとすると、単調に増加する桁でN以下の最大数を見つける必要があります。隣接する数字のxとyの各ペアがx<=yを満たす場合にのみ、整数の数字が単調に増加することがわかっています。したがって、入力が332の場合、結果は299になります。

これを解決するには、次の手順に従います-

  • s:=文字列としてのN、i:=1、n:=sのサイズ
  • while i =s [i – 1]
    • iを1増やします
  • if i
  • i>0かつs[i– 1]> s [i]の場合、
    • iを1つ減らします
    • s[i]を1つ減らします
  • i+1からnの範囲のjの場合
    • s [j]:=‘9’
  • sを数値として返す
  • 理解を深めるために、次の実装を見てみましょう-

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       int monotoneIncreasingDigits(int N) {
          string s = to_string(N);
          int i = 1;
          int n = s.size();
          while(i < n && s[i] >= s[i - 1]) i++;
          if( i < n)
          while(i > 0 && s[i - 1] > s[i]){
             i--;
             s[i]--;
          }
          for(int j = i + 1; j < n; j++)s[j] = '9';
          return stoi(s);
       }
    };
    main(){
       Solution ob;
       cout << (ob.monotoneIncreasingDigits(332));
    }

    入力

    332

    出力

    299

    1. C++プログラムでK桁を削除する

      数のシーケンスが、少なくとも3つの要素で構成されていて、2つの連続する要素の差が同じである場合、算術と呼ばれるとします。したがって、たとえば、これらは等差数列です:[1、3、5、7、9]、[7、7、7、7]、[3、-1、-5、-9]、しかし次のシーケンスはそうではありません算術。 [1、1、2、5、7] ここで、N個の数値で構成されるゼロインデックス配列Aが与えられます。その与えられた配列のスライスは、0 <=P

    2. C++でK桁を削除する

      文字列として表される非負の整数numがあるとすると、新しい数値が可能な限り最小になるように、数値からk桁を削除する必要があります。したがって、入力が「1432219」のようで、k =3の場合、結果は「1219」になります。 これを解決するには、次の手順に従います- スタックstを定義し、空の文字列retを作成します n:=numのサイズ 0からn–1の範囲のiの場合 num [i] スタックから削除し、kを1減らします stにnum[i]を挿入します kが0でない場合、スタックから要素を削除します スタックが空ではない間 ret: