您的位置:首页 > 其它

ZOJ 1539(ZZULI 1606) LOT (递…

2012-12-05 17:14 381 查看
Lot
Time Limit: 2 Seconds
    Memory Limit: 65536 KB
Out of N soldiers, standing in one line, it is required to
choose several to send them scouting.

In order to do that, the following operation is performed several
times: if the line consists of more than three soldiers, then all
soldiers, standing on even positions, or all soldiers, standing on
odd positions, are taken away. The above is done until three or
less soldiers are left in the line. They are sent scouting. Find,
how many different groups of three scouts may be created this
way.

Note: Groups with less than three number of soldiers are not taken
into consideration.

0 < N <= 10 000 000

Input

The input file contains the number N.

Process to the end of file.

Output

The output file must contain the solution - the amount of
variants.

Sample Input

10

4

Sample Output

2

0

其实可以递推的题一般都可以用递归解决的

 

题意:给你一个n排成一列,可以取出奇数位的数,也可以取出偶数位的数,求最终使队列里面要剩下三个数有多少种取法

 

我用了递归,虽然比较耗时,但是还好没超时,代码比较简单明了,就不说了

 

代码:

C语言: 高亮代码由发芽网提供
#include<stdio.h>

int
num;

void
DFS(int n)
{

   if(n==3){num++;return;}

   if(n<3)return;

   if(n%2==0)

   {

       DFS(n/2);

       DFS(n/2);

   }

   else {

       DFS(n/2);

       DFS(n/2+1);

   }
}
int
main()
{

   int n;

   while(scanf("%d",&n)!=EOF)

   {

       num=0;

       DFS(n);

       printf("%d\n",num);

   }

   return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: