激光样式--枚举+递推

  • 枚举
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]);
    }
}
全部评论

相关推荐

04-15 09:59
门头沟学院 C++
yy_11:小公司人家没必要泄密,大公司都是本地部署了
你想吐槽公司的哪些规定
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务