递推:0->10 ;
1->01;
00->1010;
10->0110;
01->1001;
11->0101;
假设a[i]表示第i 步时候的00的个数,由上面的可以看到,00是由01 得到的,所以只要知道a[i-1]的01的个数就能够知道a[i]的00的个数了,那a[i-1]怎么求呢,同样看推导,01由1和00 得到,而第i步1的个数是2^(i-1),所以a[i]=2^(i-3)+a[i-2];
大数的话用java比较方便,用C++效率高点
import java.io.*;
import java.math.*;
import java.util.*;
public class Main
{
public static void main(String[] args)
{
int N;
BigInteger []a=new BigInteger[1001];
a[1]=new BigInteger("0");
a[2]=new BigInteger("1");
a[3]=new BigInteger("1");
for(int i=4;i<=1000;i++)
{
a[i]=BigInteger.valueOf(2).pow(i-3).add(a[i-2]);
}
Scanner cin=new Scanner(System.in);
while(cin.hasNext())
{
N=cin.nextInt();
System.out.println(a[N].toString());
}
}
}