规则,每一步1变成10
0变成01
一开始给你1个1
问第n步后有几组连续的0(0的个数>=2)?
例
起始 1 0
第一步 10 0
第二步 1001 1
第三步 10010110 1
第四步 1001011001101001 3
最后一列是答案,求此题解法
解法一:
public class Test {
private static int N=6;
public static void main(String[] args) {
String s="1";
for(int i=0;i<N;i++){
s=func(s);
System.out.println(s+"次数为:"+(s.split("00").length-1));
}
}
private static String func(String s){
return s.replaceAll("1", "a").replaceAll("0", "01").replaceAll("a", "10");
}
}
解法二:
public static int cal(int n){
int count = 0; //记录00组数目
StringBuffer sb = new StringBuffer("1");
//产生所要的 StringBuffer
for(int i = 0; i < n ; i++){
int length = sb.length();
for(int j= 0; j < length; j++){
if(sb.charAt(j) == '0')
sb.append('1');
if(sb.charAt(j) == '1')
sb.append('0');
// System.out.println(sb);
}
}
// System.out.println( sb.toString());
//计算00组数目
for(int i = 0; i <sb.length(); i++){
if( i < sb.length() && sb.charAt(i) == '0' ){
if(++i <sb.length() && sb.charAt(i) =='0')
count++;
}
}
return count;
}
解法三:
设a(n)为第n步连续的0的个数
n a(n)
第1步 10 a(1)= 0
第2步 1001 a(2)= 1
第3步 10010110 a(3)= 1
第4步 1001011001101001 a(4)= 3
第5步 10010110011010010110100110010110 a(5)= 5
可以归纳出来的规律是:a(n) = 2^(n-2) - a(n-1)
递归代入,a(n) = 2^(n-2) - 2^(n-3) + 2^(n-4) ... + ((-1)^(n-3))*(2^1) + ((-1)^(n-2))*(2^0) + ((-1)^(n-1))* 0
则通项公式:
a(n) = (2^(n-1) + 1*(-1)^n) / 3
public static int cal(int n){
if( 1 == n){
return 0;
}
return (int) Math.pow(2, n-2) - (cal(n-1));
}