用 C++ 统计从 N 开始,每次加 1 并去除尾部零后能生成的唯一数字个数
给定一个数字 N 作为输入。对 N 执行两个操作,并确定在此过程中生成的唯一数字的个数。步骤如下:
将数字加 1
如有,则去除生成的数字的尾部零
如果 N 为 8,则生成的数字将为
应用步骤 1:8 → 9 →
应用步骤 2:1 → (从 10 中去除 0)
应用步骤 1:2 → 3 → 4 → 5 → 6 → 7 → 8 (相同的序列)
唯一数字的个数为 9。
例如
输入
N=21
输出
Count of unique numbers that can be generated from N by adding one and removing trailing zeros are: 18
解释
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
输入
N=38
输出
Count of unique numbers that can be generated from N by adding one and removing trailing zeros are: 11
解释
Numbers will be: 38, 39, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4 −−−now same sequence Unique numbers are: 11
**以下程序中使用的方案如下:**
在此方案中,我们将创建一个无序集合,其中包含应用步骤 1 和 2 后生成的全部唯一数字。如果数字重复,我们将停止迭代。集合的大小将给出在此过程中生成的唯一数字的个数。
将数字 N 作为整数。
使用 unordered_set<int> U_S 插入生成的数字。
函数 unique_N(unordered_set<int>& U_S, int N) 获取集合和 N,并将数字添加到集合 U_S 中,直到集合中的所有数字都是唯一的。
如果 U_S.count(N) 返回 1,则表示 N 已存在于集合中。因此,数字将重复,从函数返回。
否则,将 N 插入到集合中并应用操作 1(加 1)。
检查数字 N 是否有尾部零(是否是 10 的倍数)。
如果 N % 10 为 0,则通过将其除以 10 来去除尾部零。
使用更新后的 N 调用函数 unique_N()。
从函数返回后,将计数作为集合 U_S 的大小。
将结果打印为计数。
示例
#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; }
输出
如果我们运行以上代码,它将生成以下输出:
Count of unique numbers that can be generated from N by adding one and removing trailing zeros are: 9
广告