取字母组串

来源:互联网 发布:美芽软件 编辑:程序博客网 时间: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