用 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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP