报 2,编号为 3 的人报 3,等等。当编号为 n 的人(即最右边的人)报完 n 之后,轮到他左边的人(即编号为
n-1 的人)报 n+1,然后编号为 n-2 的人报 n+2,以此类推。当最左边的人再次报数之后,报数方向又变成从左
到右,依次类推。
为了防止游戏太无聊,报数时有一个特例:如果应该报的数包含数字 7 或者是 7 的倍数,他应当用拍手代
输入包含不超过 10 组数据。每组数据占一行,包含三个整数 n,m 和 k(2<=n<=100, 1<=m<=n,
1<=k<=100)。输入结束标志为 n=m=k=0。
对于每组数据,输出一行,即编号为 m 的人第 k 次拍手时,他实际上数到的那个整数。
4 3 1 4 3 2 4 3 3 4 3 4 0 0 0
17 21 27 35
通过flag2来判断此时是要正着报还是要倒着报,flag储存当前报到了哪一个人,i储存报到了第多少个数,记得每次都给b数组初始化。
#include
using namespace std;
int b[110];
bool check(int n)
{
if(n%7==0)
return true;
while(n)
{
if(n%10==7)
return true;
n/=10;
}
return false;
}
int main()
{
int n,m,k;
while(cin>>n>>m>>k)
{
memset(b,0,sizeof(b));
if(n==0&&m==0&&k==0)
break;
int flag=0;
int flag2=0;
int i=0;
while(1)
{
i++;
if(flag2)
flag--;
else
flag++;
if(flag==n+1)
{
flag=n-1;
flag2=1;
}
else if(flag==0)
{
flag=2;
flag2=0;
}
if(check(i))
{
b[flag]++;
if(flag==m&&b[flag]==k)
{
cout<