甲和乙两人玩抽取火柴的游戏,共有21根火柴。每人每次最多取4根,最少取1根火柴。如果某个人取到最后一根火柴则输了.甲让乙先抽取,结果每次都是甲赢.这是为什么?
算法分析:甲要每次都赢,那么每次甲只给乙剩1根火柴,因为此时乙至少取一根火柴,这样才能保证甲赢。由于乙先抽取,因此只要保证甲抽取的数量和乙抽取的数量之和为5即可。
package suanfa;
import java.util.Scanner;
public class Example_3 {
static int computer,user,last;
public static void main(String[] args) {
int num;
System.out.println("请先输入火柴的总数量 ");
Scanner input = new Scanner(System.in);
num = input.nextInt();
System.out.printf("火柴总数量 %d根",num);
last = num;
jiangjun();
}
public static void jiangjun(){
while(true){
System.out.printf("----------目前还有火柴 %d 根 ------------\n",last);
System.out.println("用户取火柴数量");
Scanner input = new Scanner(System.in);
user = input.nextInt();
if(user <1 || user>4 ||user>last){
System.out.println("你违规了");
continue;
}
last = last - user;
if(last == 0){
System.out.println("用户取得最后一根火柴,计算机赢了");
break;
}else{
computer = 5-user;
last = last - computer;
System.out.printf("计算机取火柴数量%d根 \n",computer);
if(last == 0){
System.out.println("计算机取得最后一根火柴,用户赢了");
break;
}
}
}
}
}
结果
请先输入火柴的总数量
21
火柴总数量 21根----------目前还有火柴 21 根 ------------
用户取火柴数量
4
计算机取火柴数量1根
----------目前还有火柴 16 根 ------------
用户取火柴数量
3
计算机取火柴数量2根
----------目前还有火柴 11 根 ------------
用户取火柴数量
2
计算机取火柴数量3根
----------目前还有火柴 6 根 ------------
用户取火柴数量
1
计算机取火柴数量4根
----------目前还有火柴 1 根 ------------
用户取火柴数量
1
用户取得最后一根火柴,计算机赢了