中级守护
题目链接: 酷町堂:1506
1506 数字黑洞123
经验值:1200 时间限制:1000毫秒 内存限制:128MB
题目描述 Description
数学中的123就跟英语中的ABC一样平凡和简单,但往往越简单的东西却蕴含着无限的能量,就像黑洞一样,可以吞噬一切。123的能力如下:取任意一个数字的各个位数,统计各个位数中偶数的个数、奇数的个数以及该数的总位数,用所得的这三个数按照偶数个数、奇数个数、总位数的顺序依次组成一个新数,如1234567891,偶数的个数为4,奇数的个数6,总位数为10,得到的新数为4610,再统计该新数的各个位数中偶数的个数、奇数的个数及总位数,再得到一个新数,如此进行下去,最终必然会落入数字黑洞123中。每一个数经过这样的操作得到123的过程是不相同的,请聪明的你计算一下任意一个正整数n(n的总位数不超过18位)通过以上过程到达数字黑洞需要进过几步?
如:输入:1234567891,经过的步骤为:
1234567891->4610->314->123,总共经过了3步,则输出3
输入描述 Input Description
输入为一行,为一个总长度不超过18位的正整数n。
输出描述 Output Description
输出为一行,为数字n经过以上步骤进入数字黑洞需要经过的操作步数。
样例输入 Sample Input
1234567891
样例输出 Sample Output
3
数据范围及提示 Data Size & Hint
如果输入的是1,则下一步为11.
Wrong Answer:80分
代码:
long long a[30],n,cnt,x,y,f,g;
int main(){
cin>>n;
while(n!=123){
x=n;
int i=1;
while(x){
a[i]=x%10;
x/=10;
if(a[i]%2==0) y++;
else f++; g++; i++;
}
if(g>=10) n=y*1000+f*100+g;
else n=y*100+f*10+g;
y=f=g=0;
cnt++;
}
cout<<cnt;
急急急!
求各位大佬找错!