SRM DIV2 575 TheNumberGameDivTwo
SRM DIV2 575 TheNumberGameDivTwo
【题意】:两个人玩游戏,给定一个数,减去他的因子(除了1和他本身外)得到一个新数,两个人轮流玩游戏.最后谁无数可减即为失败。
【算法】根据N/P分析:
1.标记出1-1000所有的质数,这都是必败点P
2.从小到大,如果不是质数,则根据N/P关系判断他是N还是P。
3.直到n为止。
一个P/N分析的例子http://blog.sina.com.cn/s/blog_87ad13a10100y3ay.html
【编码调试BUG】
1.49行,生成prime数组的时候,循环结束条件应该是i<=n/2,少考虑了等号的情况;
2.23行,j 【Java代码】来自菜鸟 【改进版1】 【算法】 1.从小到大,则根据N/P关系判断他是N还是P(类似动态规划的填表)。 2.直到n为止。 【分析】 1.无需求出prime,因为算法可以保证所有的prime都为P。 【改进版2】实现时有点小区别,算法不变 【Java代码】来自大神 【分析】 1.大神采用的是动态规划的递归实现。 2.P问题对应memo[i]=0,N问题对应memo[i]=1。 3.divisors(n)方法用于获取n的所有除数。 【学习】 1.Arrays.fill()这个方法不错啊,有点像C里的memset。 【C++代码】来自大神 【分析】 1.大神也是DP的递归实现。 2.代码好简洁,好帅气! 【总结】 1.N/P属于博弈论范畴,应该用DP实现。 转载于:https://www.cnblogs.com/wang3/p/3219730.html
1 import java.util.*;
2 import java.util.regex.*;
3 import java.text.*;
4 import java.math.*;
5
6
7 public class TheNumberGameDivTwo
8 {
9 boolean[] prime;
10 public String find(int n)
11 {
12 int i,j,temp;
13 boolean[] p = new boolean[n+1];
14
15 getPrimes(n);
16 //init all primes to P
17 for(i=1;i<=n;i++)
18 p[i]=prime[i];
19
20 for(i=1;i<=n;i++){
21 if(p[i])
22 continue;
23 for(j=2;j
View Code
1 import java.util.*;
2 import java.util.regex.*;
3 import java.text.*;
4 import java.math.*;
5
6
7 public class TheNumberGameDivTwo
8 {
9 public String find(int n)
10 {
11 int i,j;
12 boolean[] p = new boolean[n+1];
13
14 p[1]=true;
15 for(i=2;i<=n;i++){
16 for(j=2;j){
17 if(i%j==0){
18 if(p[i-j]==true){
19 p[i]=false;
20 break;
21 }
22 }
23 }
24 if(j==i)
25 p[i]=true;
26
27 }
28 if(p[n])
29 return "Brus";
30 else
31 return "John";
32 }
33
34
35 }
36 //Powered by KawigiEdit 2.1.4 (beta) modified by pivanof!
View Code
1 import java.util.*;
2 import java.util.regex.*;
3 import java.text.*;
4 import java.math.*;
5
6
7 public class TheNumberGameDivTwo
8 {
9 public String find(int n)
10 {
11 int i,j;
12 boolean[] p = new boolean[n+1];
13
14
15 for(i=1;i<=n;i++){
16 for(j=i/2;j
View Code
import java.util.*; public class TheNumberGameDivTwo { ArrayList
View Code
#include
View Code
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
