Java 算法模版

辗转相除法

求最大公约数
最小公倍数 = ab/最大公约数

递归
1
2
3
long gcd(long a, long b) {
return a == 0 ? b : gcd(b % a, a);
}
迭代
1
2
3
4
5
6
7
8
long gcd(long a, long b) {
long tmp;
while ((tmp = a % b) != 0) {
a = b;
b = tmp;
}
return b;
}
Read more

三个常见博弈游戏

前言

通过数论或者自然数性质完美解决的三个常见博弈游戏:

博弈解决方法
Bash Game同余理论
Nim Game异或理论
Wythoff Game黄金分割
Read more

Bash游戏

Bash游戏

http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1066

有一堆石子共有N个。A B两个人轮流拿,A先拿。每次最少拿1颗,最多拿K颗,拿到最后1颗石子的人获胜。
假设A B都非常聪明,拿石子的过程中不会出现失误。给出N和K,问最后谁能赢得比赛。

例如N = 3,K = 2。无论A如何拿,B都可以拿到最后1颗石子。

Read more

构造回文

https://www.nowcoder.com/test/question/28c1dc06bc9b4afd957b01acdf046e69?pid=1725829&tid=14425231

给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
输出需要删除的字符个数。

输入描述:
输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.

输出描述:
对于每组数据,输出一个整数,代表最少需要删除的字符个数。

Read more