此题是一道签到题目,说是签到题目但是自己却做了好久啊。。。如果暴力算的话,会超时。
仔细分析一下会发现f(0)跟f(1)是能够相互转化的。所以当算到0和1的时候只需要根据奇偶次运算就能够判断结果了。
代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int n;
int a[15]={1,0,0,0,1,0,1,0,2,1};
int x,k;
int main()
{
while (scanf("%d",&n)!=EOF)
{
while (n--)
{
scanf("%d%d",&x,&k);
int ans=x;
for (int i=0;i<k;i++)
{
int t=x,tans=0;
if(t==0)
{
tans=1;
}
else
{
while (t)
{
tans+=a[t%10];
t/=10;
}
}
if(tans==1||tans==0)
{
if((k-i-1)%2)
{
tans=(tans+1)%2;
}
ans=tans;
break;
}
x=tans;
ans=tans;
}
printf("%d\n",ans);
}
}
return 0;
}