激光样式--枚举+递推
枚举
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int cnt = 0;
Scanner sc = new Scanner (System.in);
int n = sc.nextInt();
for(int i = 0 ; i < 1 << n ; i++) {
boolean flag = true;
for(int j = 1 ; j < n ; j++) {
if(get(i,j)==1&&get(i,j-1)==1) {
flag = false;
break;
}
}
if(flag) {
cnt +=1;
}
}
System.out.println(cnt);
}
private static int get(int i, int j) {//判断i的j位是否为1
return i >>j&1;
}
}
递推解法:
开一个二维数组 选0 /1
初始值arr(0,0) 没有限制下一位 我们下一位写0 /1 都行 所以我们把第0位写成 “0 ” 为 1 如果第0位(不是有效位)看成1限制有效位第一位 不能填1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner (System.in);
int num = sc.nextInt();
int arr[][] = new int[num+1][2];
arr[0][0] =1;//为后面作铺垫 方便后面的代码处理
for(int i = 1 ; i <= num ;i++) {
arr[i][0] = arr[i-1][0] + arr[i-1][1];
arr[i][1] = arr[i-1][0];
}
System.out.println(arr[num][1]+ arr[num][0]);
}
}