nyoj559 报数游戏

Description

n个人站成一行玩一个报数游戏。所有人从左到右编号为1到n。游戏开始时,最左边的人报1,他右边的人报2,编号为3的人报3,等等。当编号为n的人(即最右边的人)报完n之后,轮到他左边的人(即编号为n-1的人)报n+1,然后编号为n-2的人报n+2,以此类推。当最左边的人再次报数之后,报数方向又变成从左到右,依次类推。 
为了防止游戏太无聊,报数时有一个特例:如果应该报的数包含数字7或者是7的倍数,他应当用拍手代替报数。下表是n=4的报数情况(X表示拍手)。当编号为3的人第4次拍手的时候,他实际上数到了35。 

给定n,m和k,你的任务是计算当编号为m的人第k次拍手时,他实际上数到了几。 

Input

输入包含不超过10组数据。每组数据占一行,包含三个整数n,m和k(2<=n<=100, 1<=m<=n, 1<=k<=100)。输入结束标志为n=m=k=0。

Output

对于每组数据,输出一行,即编号为m的人第k次拍手时,他实际上数到的那个整数。

Sample Input

4 3 1 
4 3 2 
4 3 3 
4 3 4 
0 0 0 

Sample Output

17 
21 
27 
35
1  2  3  4
7  6  5
   8  9  10
13 12 11
   14 15 16
19 18 17
#include<stdio.h>
int fun(long long m) //函数判断这个数是否为7倍数或含有7
{
    int x=0;
    if(m%7==0)
    {
        x=1;
    }
    else
    {
        int s=m;
        while(s)
        {
            int f;
            f=s%10;
            s/=10;
            if(f==7)
            {
                x=1;
                break;
            }
        }
    }
    return x;
}

int main()
{
    int n,k,i;
    long long m;
    while(~scanf("%d%lld%d",&n,&m,&k))
    {
        long long t=m;
        int sum=0;
        if(n==0&&m==0&&k==0)
            break;
        if(fun(m))
            sum++; //sum用来统计m报的数第几次出现7倍数或含有7
        if(k==sum)  //当给出的m,即m第一次都是7倍数或含有7单独讨论
        {
            printf("%lld\n",m);
            continue;
        }
        for(i=0; ; i++)//从0行开始,偶数行奇数行两种情况
        {
            int l;
            l=m;
            if(i%2==0)  //m表示m号每一次报的数
                m+=(n-t)*2;  
            else
                m+=(t-1)*2;

            if(fun(m)&&m!=l)//m不等于l,如上图所示为了排除转折时空格的影响,如果没有m不等于l,
                            //最后或第一个人则报了两次一个相同的数,当这个数是7倍数或含有7则会有影响
                sum++;
            if(sum==k&&m!=l)
            {
                printf("%lld\n",m);
                break;
            }
        }

    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值