题目:
###本题主要考察模拟
#include<bits/stdc++.h>
using namespace std;
int sum(int x){
int result=0;
while(x){
result+=x%10;
x/=10;
}
return result;
}
int main(){
int t;cin>>t;
while(t--){
int n;cin>>n;
int buf=1;
int ans=0;
for(int i=1;i<=100000000;++i){
if(n!=buf&&n>buf){
ans++;
}
else if(n==buf){
cout<<ans<<'\n';
break;
}
else if(n<buf){
cout<<-1<<'\n';
break;
}
buf+=sum(buf);
}
}
return 0;
}
整体思路:
- 根据题意,输入t,用while循环分别用ans和buf记录操作次数与n做比较
- 相等则输出ans否则输出-1
- 据题意,我们要记录该石头编号与该石头编号各个位数之和这里编写了一个函数返回各个位数之和,再加上buf即可