取字母组串
print?/* 取字母组成串
* 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));
}
}
/* 取字母组成串
* 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));
}
} [java] 方法二:
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;
}
}
方法二:
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++)
{
&nb
补充:软件开发 , Java ,