编程练习 3

2014-11-24 03:21:53 · 作者: · 浏览: 0

CSDN 英雄会 编程比赛
题目 报数游戏(2)
地址 http://hero.csdn.net/
代码挂上 gpl


题目详情
N个人(编号1-N),站成一排,进行报数游戏。报数过程可能进行很多轮,有如下规则:
(1) 如果剩余人数不超过3个人,则游戏结束。
(2) 大家报数,然后留下报奇数的人继续游戏,或者留下报偶数的人继续游戏。
重复如此(1)(2)两步骤,到游戏结束。
问:最终剩下的三人组有多少种情况?(注意是三人组,例如如果最后剩下2个或者1个人,不计入结果中)。
输入n, (0 输出最终结果。

#include
  
   
int howmany(int x)
{
    static int a;//3人组的数量
    if(x>3)//当人数大于3时,取子列
    {
        if(x%2==0)//当人数为偶数时
        {
            howmany(x/2);//取其中的奇数
            howmany(x/2);//取其中的偶数
        }
        else//当人数为奇书时
        {
            howmany(x/2+1);//取其中的奇数
            howmany(x/2);//取其中的偶数
        }
    }
    else if(x==3)//当人数为3时,三人组的数量加1
        a++;
    return a;
}
//start 提示:自动阅卷起始唯一标识,请勿删除或增加。
int main(void)
{    
    printf("%d",howmany(7));
    return 0;
}
//end //提示:自动阅卷结束唯一标识,请勿删除或增加。