奇偶类约瑟夫

/*有奖思考题,一只猫抓了50只老鼠,依次编号1-50,先吃掉编号为奇数的,
然后剩下的再站队重编号,再吃掉编号为偶数的,
然后继续站队吃奇数丶偶数循环,问最后剩下的是第一次编号的第几只?
*/
#include<stdio.h>
#define n 50
int main()
{
    int a[n+1],i,k=1,m,x,j;
    for(i=1;i<=n;i++)
    {
        a[i]=i;//number
    }
    for(j=3;k<n-1;j++)
    {
        x=1;
        if(j%2==1)m=1;
        else m=0;
        for(i=1;i<=n;i++)//一轮 
        {
            if(a[i]!=0)
            {
               if(a[i]%2==m)
               { 
                  a[i]=0;k++;//have been eaten
               }
               else {a[i]=x;x++;}//number
            }
        }
    }
    for(i=1;i<=n;i++)
    if(a[i]!=0)
    printf("%d
",i);
    return 0;
}
原文地址:https://www.cnblogs.com/tt-t/p/6179882.html