Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình tìm ra số nguyên nhỏ hơn n Chứa nhiều chữ số giống nhau trong C ++

Giả sử chúng ta có một số nguyên n, chúng ta phải tìm số nguyên dương nhỏ hơn hoặc bằng n, trong đó các số nguyên ít nhất có một chữ số xuất hiện nhiều hơn một lần.

Vì vậy, nếu đầu vào là n =200, thì đầu ra sẽ là 38

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

#include <bits/stdc++.h>
using namespace std;
int solve(int n) {
   vector<int> a;
   for (int x = n; x; x /= 10) a.push_back(x % 10);
   reverse(a.begin(), a.end());
   int ret = n;
   for (int w = 1, d = 1; w < a.size(); ++w) {
      d *= min(9, 10 − w + 1);
      ret −= d;
   }
   auto go = [&]() {
      int b = (1 << 10) − 1;
      for (int i = 0; i < a.size(); ++i) {
         for (int d = (i < 1); d < a[i]; ++d) {
            int x = 0;
            if ((1 << d) & b) ++x;
               for (int j = i + 1; j < a.size(); ++j) x *= 10 − j;
               ret −= x;
            }
            if ((1 << a[i]) & b)
            b ^= (1 << a[i]);
            else
            return;
         }
         −−ret;
      };
      go();
      return ret;
}
int main(){
   cout << solve(200) << endl;
   return 0;
}

Đầu vào

200

Đầu ra

38