用 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

更新於:2021年1月5日

瀏覽量 134 次

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.