给定数字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中,直到其中所有数字都是唯一的。
如果你_S.count(N)返回1表示N已存在于集合中。因此数字将重复,并从函数返回。
否则,将N插入到集合中并应用操作1(加1)。
检查数字N是否有尾随零(是10的倍数)。
如果N%10为0,则将尾随零除以10,以除去尾随零。
通话功能 unique_N() 使用更新的N。
从函数返回后,将count作为集合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