Codeforces1157A(A题)Reachable Numbers
Posted yuanhang110
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces1157A(A题)Reachable Numbers相关的知识,希望对你有一定的参考价值。
Let‘s denote a function f(x)f(x) in such a way: we add 11 to xx, then, while there is at least one trailing zero in the resulting number, we remove that zero. For example,
- f(599)=6f(599)=6: 599+1=600→60→6599+1=600→60→6;
- f(7)=8f(7)=8: 7+1=87+1=8;
- f(9)=1f(9)=1: 9+1=10→19+1=10→1;
- f(10099)=101f(10099)=101: 10099+1=10100→1010→10110099+1=10100→1010→101.
We say that some number yy is reachable from xx if we can apply function ff to xx some (possibly zero) times so that we get yy as a result. For example, 102102 is reachable from 1009810098 because f(f(f(10098)))=f(f(10099))=f(101)=102f(f(f(10098)))=f(f(10099))=f(101)=102; and any number is reachable from itself.
You are given a number nn; your task is to count how many different numbers are reachable from nn.
The first line contains one integer nn (1≤n≤1091≤n≤109).
Print one integer: the number of different numbers that are reachable from nn.
1 #include<bits/stdc++.h> 2 #include<set> 3 using namespace std; 4 typedef long long ll; 5 int f(int x) 6 while((x+1)%10==0) 7 x=(x+1)/10-1; 8 9 x=x+1; 10 return x; 11 12 int main() 13 ll n,cnt=0; 14 bool flag=true; 15 set <int > d; 16 cin>>n; 17 ll a=n; 18 d.insert(a); 19 while(flag) 20 a=f(a); 21 cnt++; 22 for(set<int>::iterator it=d.begin(); it!=d.end(); it++) 23 if(*it==a) 24 cout<<cnt; 25 return 0; 26 27 28 d.insert(a); 29 30
思路分析:先编写去尾数0的函数,然后将每次调用函数后的值存入集合,遍历集合,要新加入集合的数等于集合内有的数就退出并同时输出集合元素个数。
以上是关于Codeforces1157A(A题)Reachable Numbers的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #353 (Div. 2) A. Infinite Sequence 思维题
Educational Codeforces Round 10 A B题
Codeforces Round #797 (Div. 3) D, E, F, G题题解