取字母组串
来源:互联网 发布:美芽软件 编辑:程序博客网 时间:2024/06/01 08:55
/* 取字母组成串 * A B C D中取5次,每个字母都可以重复取出,形成一个串。 现在要求,串中A出现的次数必须为偶数(0次也算偶数)。 求可以形成多少种可能的串。 */ public class 取字母组串 { // 取n次,A出现奇数次 public static int g(int n) { if (n == 1) return 1; return 3 * g(n - 1) + f(n - 1); } // 取n次,A出现偶次 public static int f(int n) { if (n == 1) return 3; return 3 * f(n - 1) + g(n - 1); } public static void main(String[] args) { System.out.println("kinds:"+f(5)); } }
方法二:public class 取字母组串 { public static int b[]=new int[5]; public static int kinds=0; public static void main(String[] args) { dfs(0,5); System.out.println("kinds:"+kinds); } static void dfs(int m,int n) { if(m==n) { if(is_even())//如果出现偶数次 { kinds++; } return; } else { for(int i=0;i<n-1;i++) { b[m]=i; dfs(m+1,n); } } } static boolean is_even() { int sum=0; for(int i=0;i<b.length;i++) { if(b[i]==0) sum++; } if(sum%2==0) return true; return false; } }
运行结果:
kinds:528