首页 > 专题系列 > Java解POJ > POJ 1067 取石子游戏 [解题报告] Java
2013
11-07

POJ 1067 取石子游戏 [解题报告] Java

取石子游戏

问题描述 :

有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者。现在给出初始的两堆石子的数目,如果轮到你先取,假设双方都采取最好的策略,问最后你是胜者还是败者。

输入:

输入包含若干行,表示若干种石子的初始情况,其中每一行包含两个非负整数a和b,表示两堆石子的数目,a和b都不大于1,000,000,000。

输出:

输出对应也有若干行,每行包含一个数字1或0,如果最后你是胜者,则为1,反之,则为0。

样例输入:

2 1
8 4
4 7

样例输出:

0
1
0

解题代码:

import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;

 public class Main {

     public static void main(String[] args) throws IOException {
         BufferedReader read = new BufferedReader(new InputStreamReader(
                 System.in));
         String s;
         int a, b;
         int min;
         int max;
         double gold = (Math.sqrt(5) - 1) / 2.0;
         int j;
         while ((s = read.readLine()) != null) {
             if (s.equals("")) {
                 break;
             }
             a = Integer.parseInt(s.split(" ")[0]);
             b = Integer.parseInt(s.split(" ")[1]);
             if (a == b || a == 0 || b == 0) {
                 System.out.println("1");
                 continue;
             }
             min = Math.min(a, b);
             max = Math.max(a, b);
             j = (int) ((max - min) / gold);
             if (min == j) {
                 System.out.println("0");
             } else {
                 System.out.println("1");
             }
         }
     } 
}

  1. 第2题,TCP不支持多播,多播和广播仅应用于UDP。所以B选项是不对的。第2题,TCP不支持多播,多播和广播仅应用于UDP。所以B选项是不对的。

  2. 这道题目的核心一句话是:取还是不取。
    如果当前取,则index+1作为参数。如果当前不取,则任用index作为参数。