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