Lot
Time Limit:1000MS Memory Limit:65536K
Total Submit:45 Accepted:17
Description
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个人里面看有多少个三人组合,当N》3时候就从奇数或者偶数位置选择,然后再依次选择。
分析:2个人时,有0种;
3个人时,有一种;
4个人时,选择偶数有2(4/2)个人,选择奇数有2(4-4/2)个人,有0种
5个人时,选择偶数有2(5/2)个人,选择奇数有3(5-5/2)个人,所以三人组合有1种;
N.个人时,选择偶数有N/2个人,选择奇数有N-N/2个人所以三人组合有F[N/2]+F[N-N/2];
代码:
#include<stdio.h> int f[10000009];//数组必须放在外边 int main() { int i,n; f[1]=0; f[2]=0;f[3]=1; for(i=4;i<=10000009;i++) f[i]=f[i/2]+f[i-i/2]; while(scanf("%d",&n)!=EOF) { printf("%d\n",f[n]); } return 0; }