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

Đếm các số duy nhất có thể được tạo từ N bằng cách thêm một và xóa các số không ở cuối trong C ++


Chúng tôi được cung cấp một số N làm đầu vào. Thực hiện hai phép toán trên N và xác định số lượng các số duy nhất được tạo ra trong quá trình này. Các bước sẽ -

  • Thêm 1 vào số

  • Xóa các số không ở cuối khỏi số đã tạo, nếu có

Nếu N là 8 thì các số được tạo ra sẽ là

Áp dụng bước 1− 8 → 9 →

Áp dụng bước 2− 1 → (loại bỏ 0 khỏi 10)

Áp dụng bước 1:2 → 3 → 4 → 5 → 6 → 7 → 8 (cùng một trình tự)

Tổng số các số duy nhất sẽ là 9.

Ví dụ

Đầu vào

N=21

Đầu ra

Count of unique numbers that can be generated from N by adding one and
removing trailing zeros are: 18

Giải thích

Numbers will be: 21, 22, 23, 24, 25, 26, 27, 28, 29, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3 −−−now same sequence Unique numbers are: 18

Đầu vào

N=38

Đầu ra

Count of unique numbers that can be generated from N by adding one and removing trailing zeros are: 11

Giải thích

Numbers will be:
38, 39, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4 −−−now same sequence
Unique numbers are: 11

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau -

Trong cách tiếp cận này, chúng tôi sẽ tạo một tập hợp không có thứ tự sẽ chứa tất cả các số duy nhất được tạo sau khi áp dụng bước 1 và 2. Trong trường hợp các số lặp lại, thì chúng tôi sẽ dừng lặp lại. Kích thước của tập hợp sẽ cung cấp cho chúng tôi số lượng các số duy nhất được tạo ra trong quá trình này.

  • Lấy số N là số nguyên.

  • Lấy U_S chưa có thứ tự_để chèn các số đã tạo.

  • Hàm unique_N (unardered_set &U_S, int N) nhận tập hợp và N và thêm các số vào tập hợp U_S cho đến khi tất cả các số là duy nhất trong đó.

  • Nếu U_S.count (N) trả về 1 có nghĩa là N đã tồn tại trong tập hợp. Vì vậy, các số sẽ lặp lại, trả về từ hàm.

  • Nếu không, hãy chèn N vào tập hợp và áp dụng thao tác 1 (tăng thêm 1).

  • Kiểm tra xem số N có các số 0 ở cuối hay không (là bội số của 10).

  • Nếu N% 10 là 0, thì xóa số 0 ở cuối bằng cách chia nó cho 10.

  • Gọi hàm unique_N () với N.

    được cập nhật
  • Sau khi quay lại từ hàm, hãy tính là kích thước của tập hợp U_S.

  • In kết quả dưới dạng số đếm.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
void unique_N(unordered_set<int>& U_S, int N){
   if (U_S.count(N)){
      return;
   }
   U_S.insert(N);
   N = N + 1;
   while (N % 10 == 0){
      N = N / 10;
   }
   unique_N(U_S, N);
}
int main(){
   int N = 7;
   unordered_set<int> U_S;
   unique_N(U_S, N);
   int count = U_S.size();
   cout<<"Count of unique numbers that can be generated from N by adding one and removing
      trailing zeros are: "<<count;
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Count of unique numbers that can be generated from N by adding one and removing trailing zeros are: 9