通过在C ++中加一并删除尾随的零来计算可以从N生成的唯一数字

给定数字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