题解:找出123…n…32这样一个周期,在循环当中,1与n的报数是一周期一次,其他都是两次,那么就要将2…n-1个数全都分开累加;但是我们不需要这样做,我们只需要找到m然后没累加一次进行判断是否满足条件就可以了.
代码如下
#include <stdio>
#define INF 0xFFFFFFF
using namespace std;
bool is7(int i)
{
if(i%7==0)return true;
while(i)
{
if(i==7)
return true;
i/=10;
}
return false;
}
int main()
{
int m,n,k;
while(~scanf("%d%d%d",&n,&m,&k))
{
int cnt=0;
if(n==0&&m==0&&k==0)
break;
int p=2*n-2;
if(m==1||m==n)
{
for(int i=m; ;i+=p)
{
if(is7(i))
cnt++;
if(cnt==k)
{printf("%d\n",i);break;}
}
}
else
{
int m1=m,m2=2*n-m;
for(int i=2; ;i++)
{
if(is7(m1))
cnt++;
if(cnt==k)
{printf("%d\n",m1);break;}
if(is7(m2))
cnt++;
if(cnt==k)
{
printf("%d\n",m2);break;
}
m1=m1+p;
m2=m2+p;
}
}
}
return 0;
}