Fork me on GitHub

激光样式--枚举+递推


枚举

	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]);
	}
}
posted @ 2019-07-07 21:35  cznczai  阅读(145)  评论(0编辑  收藏  举报