wust oj 1251 报数游戏

题目链接:点击打开链接


题目大意:

n个人报数,最左边的人(第1个)开始报1,然后2啦、3啦。。。第n个人报n。接着,

编号为n-1的人报n+1。依次规律左右报数。

当报到是7的倍数或者数字中含有7则拍掌。问第m个人第k次拍掌时所报的数是多少。


分析:

报数有规律:

1、编号为1和n的人每次报的数间隔为2(n-1)

2、除编号为1和n的两个人外,其余编号的人每次的间隔是2*(n-m)和2*m-2交错。


写一个判断的函数,能被7整除或者数的某一位含7就次数+1

然后就是暴力加咯。。。。


#include
#include
using namespace std;

int judge(int x)
{
    int a=0;
    if(x%7==0)
        a=1;
    else
    {
        int t=x,u;
        while(t>6)
        {
            u=t%10;
            if(u==7)
            {
                a=1;
                break;
            }
            t=t/10;
        }
    }
    return a;
}

int main()
{
    int n,m,k;
    while(scanf("%d%d%d",&n,&m,&k)!=EOF)
    {
        if(n==0 && m==0 && k==0)
            break;
        int ans=judge(m);

        int x=m;
        if(m==1 || m==n)
        {
            while(ans!=k)
            {
                x+=(2*n-2);
                ans+=judge(x);
            }
        }
        else
        {
            while(ans!=k)
            {
                x+=(2*(n-m));
                ans+=judge(x);
                if(ans==k)
                    break;
                else
                {
                    x+=(2*m-2);
                    ans+=judge(x);
                }
            }
        }
        printf("%d\n",x);
    }
    return 0;
}


你可能感兴趣的:(Math)