题目描述

输入描述

输出描述

输入样例1
1098
输出样例1
20
输入样例2
10
输出样例2
19
样例解释

题目大意: 有一个函数 f ( x ) ,效果是将 x + 1 后,去掉末尾所有的 0,且可以多次进行函数 f ( x ) 的运算。问给定一个整数 n ,经过多次函数 f ( x ) 的计算,能转换为几个不同的数(包括自身)。
div3 A 的普通思维题,但也可以通过暴力求解,因为每位数最多操作 10 次,复杂度是 O( 10 * 10 ),仅需用 map 标记是否已得出该数即可。
对于每位数的最多操作 10 次 ,可由样例解释得每一位对答案的贡献值都是不同的,例 1098 中,最后一位的贡献值为 9 - 8 = 1 ( 此处未将数字本身算进 ),倒二位的贡献值为 9 - 9 = 0 ,倒三位的贡献值为 9 - 0 = 9 ,但第一位的贡献值始终为 9。
对于第一位的贡献值为何始终为 9 ,模拟一下即可得到答案:例经过一系列操作后得到数字 7,则经过函数变换后的结果分别是:8 ,9,9 + 1 = 10 - > 1,2,3,4,5,6。因此不论第一位数的数值为几,该位的贡献值始终为 9 。由此即可通过每位的贡献值得出答案:9 + 9 + 0 + 1 + 1(数字本身)= 20
当该数仅有一位时,数字本身的贡献将与第一位的固定贡献重合,特殊考虑即可。
参考代码
#include<bits/stdc++.h>
using namespace std;
int num,a[15],cnt,ans=10;
int main(){
	cin>>num;
	while(num){
		a[++cnt]=num%10;
		num/=10;
	}
	
	if(cnt==1) ans--;
	for(int i=1;i<cnt;i++)
		ans+=9-a[i];
	cout<<ans<<endl;
	return 0;
}
 
                   
                   
                   
                   
                             本文介绍了一个数学问题,涉及一个特殊的函数f(x),它将整数x加1后去除末尾所有0。文章讨论了如何计算经过多次函数应用后可能得到的不同数字数量,并提供了一个O(10*10)复杂度的解决方案。作者通过分析每个数位的贡献值来确定答案,并给出了具体代码实现。问题挑战了读者的逻辑思维和算法设计能力。
本文介绍了一个数学问题,涉及一个特殊的函数f(x),它将整数x加1后去除末尾所有0。文章讨论了如何计算经过多次函数应用后可能得到的不同数字数量,并提供了一个O(10*10)复杂度的解决方案。作者通过分析每个数位的贡献值来确定答案,并给出了具体代码实现。问题挑战了读者的逻辑思维和算法设计能力。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   3413
					3413
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            