2 回答
TA贡献1839条经验 获得超15个赞
SOLUTION2中的更改(现在可以提供正确的结果)
导入java.util。*;
公共类CoinGame2
{
public static void Count(int n,String [] s)// n:否。硬币,s:{“ Alice”,“ Bob”}(顺序)
{
如果(n> 0)
{
if(n == 1 || n == 2 || n == 4)System.out.println(s [0]); //如果剩下1/2/4个硬币,则有机会赢得的硬币
别的
{
//字符串temp = s [0]; s [0] = s [1]; s [1] =温度;//反转s
String [] t = Arrays.copyOfRange(s,0,s.length);
字符串温度= t [0]; t [0] = t [1]; t [1] =温度;
计数(n-1,t);
计数(n-2,t);
计数(n-4,t);
}
}
}
公共静态void main(String [] args)
{
String [] order = new String [] {“ A”,“ B”};
Count(6,order);
}
}
TA贡献1946条经验 获得超3个赞
有时它有助于简化递归问题。我重新编写了您的问题,但我以5个硬币开始,选择了1或2。这样,第一个选择器将始终获胜。您唯一会输的方法是连续两次选择,结果不言而喻。运行此代码,结论很明显,如上所述,整个过程都在运行s的相同实例。
public static void Count(int n, String[] s) // n: no. of coins
//s:{"Alice","Bob"} (order)
{
if(n>0)
{
if(n==1 || n==2 ) System.out.println( s[0] ); // if 1/2/4
//coins left, the one with first chance wins
else
{
String temp = s[0]; s[0] = s[1]; s[1] = temp; // reverse s
Count(n-1,s);
Count(n-2,s);
}
}
}
public static void main(String[] args)
{
String[] order = new String[]{"A","B"};
Count(5,order);
}
// the result is B,B,B,A,A
添加回答
举报