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

C++で繰り返される数字の数


正の整数Nがあるとすると、少なくとも1つの繰り返し桁を持つN以下の正の整数の数を見つける必要があります。

したがって、入力が99の場合、出力は9になります。これは、11、22、33、44、55、66、77、88、99のような数値があるためです。

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

  • 関数A()を定義します。これにはm、n、

    が必要です。
    • ret:=1

    • 初期化i:=0の場合、i

      • ret:=ret * m

      • (mを1減らします)

    • retを返す

  • メインの方法から、次のようにします-

  • 配列arrを定義する

  • 初期化i:=N + 1の場合、i> 0の場合、更新i:=i / 10、do −

    • インデックスimod10のarrの最初の要素をarrに挿入します

  • ret:=0

  • n:=arrのサイズ

  • 初期化i:=1の場合、i

    • ret:=ret + 9 * A(9、i-1)

  • 訪問した1セットを定義する

  • 初期化i:=0の場合、i

    • 数字:=arr [i]

    • 初期化j:=(iが0と同じ場合は1、それ以外の場合は0)の場合、j <桁の場合、更新(jを1増やします)、実行-

      • jが訪問中の場合、-

        • 次の部分を無視し、次の反復にスキップします

      • ret:=ret + A(9-i、n-i-1)

    • 数字が訪問されている場合、-

      • ループから出てきます

    • 訪問者に数字を挿入

  • Nを返す-ret

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   int A(int m, int n){
      int ret = 1;
      for (int i = 0; i < n; i++) {
         ret *= m;
         m--;
      }
      return ret;
   }
   int numDupDigitsAtMostN(int N){
      vector<int> arr;
      for (int i = N + 1; i > 0; i /= 10) {
         arr.insert(arr.begin(), i % 10);
      }
      int ret = 0;
      int n = arr.size();
      for (int i = 1; i < n; i++) {
         ret += 9 * A(9, i - 1);
      }
      set<int> visited;
      for (int i = 0; i < n; i++) {
         int digit = arr[i];
         for (int j = i == 0 ? 1 : 0; j < digit; j++) {
            if (visited.count(j))
            continue;
            ret += A(9 - i, n - i - 1);
         }
         if (visited.count(digit))
         break;
         visited.insert(digit);
      }
      return N - ret;
   }
};
main(){
   Solution ob;
   cout << (ob.numDupDigitsAtMostN(99));
}

入力

99

出力

9

  1. C++で指定された条件でグリッドに8つの数字を入力します

    1、2、3、4、5、6、7、8を、指定された図の8つの円に配置するとします。このようにして、シーケンス内で隣接する番号に隣接する番号はありません。 したがって、入力が次のような場合 0 - 1 - 1 0 - 1 - 1 - 1 - 1 0 - 1 - 1 0 その場合、出力は次のようになります これを解決するには、次の手順に従います- N:=3、M:=4 考慮されていません:=-1 関数present_in_grid()を定義します。これには、grid [N] [M]、num、が必要です。

  2. C++でのTribonacci番号

    ここでは、C++を使用してTribonacci番号を生成する方法を説明します。トリボナッチ数はフィボナッチ数に似ていますが、ここでは前の3つの項を追加して項を生成しています。 T(n)を生成したい場合、式は次のようになります- T(n) = T(n - 1) + T(n - 2) + T(n - 3) 最初のいくつかの数字は{0、1、1}です。 アルゴリズム tribonacci(n): Begin    first := 0, second := 1, third := 1    print first, second, third   &