美文网首页
Java-猜生日游戏

Java-猜生日游戏

作者: 青葱烈马 | 来源:发表于2019-01-11 11:43 被阅读3次

5个问题找出他出生在一个月的哪一天,每个问题都是在问他的生日是否在数字集合中。
生日是出现这一天的每个集合的第一个数字之和。

import javax.swing.JOptionPane;
public class GuessBirthday {
  public static void main(String[] args){
      String s1=
        "1 3 5 7\n"+
        "9 11 13 15\n"+
        "17 19 21 23\n"+
        "25 27 29 31";
      String s2=
        "2 3 6 7\n"+
        "10 11 14 15\n"+
        "18 19 22 23\n"+
        "26 27 30 31";
      String s3=
        "4 5 6 7\n"+
        "12 13 14 15\n"+
        "20 21 22 23\n"+
        "28 29 30 31";
      String s4=
         "8 9 10 11\n"+
         "12 13 14 15\n"+
         "24 25 26 27\n"+
         "28 29 30 31";
      String s5=
        "16 17 18 19\n"+
        "20 21 22 23\n"+
        "24 25 26 27\n"+
        "28 29 30 31";
      int day=0;
      int ans=JOptionPane.showConfirmDialog(null, "你的生日在这些数字中吗?\n"+s1);
      if(ans==JOptionPane.YES_OPTION)
          day+=1;

      ans=JOptionPane.showConfirmDialog(null, "你的生日在这些数字中吗?\n"+s2);
      if(ans==JOptionPane.YES_OPTION)
          day+=2;

      ans=JOptionPane.showConfirmDialog(null, "你的生日在这些数字中吗?\n"+s3);
      if(ans==JOptionPane.YES_OPTION)
          day+=4;

       ans=JOptionPane.showConfirmDialog(null, "你的生日在这些数字中吗?\n"+s4);
      if(ans==JOptionPane.YES_OPTION)
          day+=8;

       ans=JOptionPane.showConfirmDialog(null, "你的生日在这些数字中吗?\n"+s5);
      if(ans==JOptionPane.YES_OPTION)
          day+=16;
      JOptionPane.showMessageDialog(null, "你的是"+day+"日!");
  }
}
原理的话,涉及到一些二进制相关的知识。

从1到31的十进制数最多用5位的二进制数就可以表示:

十进制 二进制
1   00001
2   00010
3   00011
…    
19 10011
…    
31  11111


假设二进数表示为b5b4b3b2b1,

而这5个Set中的数分别是b1为1的集合,b2为1的集合,b3为1的集合,b4为1的集合,b5为1的集合,

如果某天的bk位为1,那么该数就出现在Setk中,

例如:  19的二进制数为10011,所以它就出现在Set1,Set2,Set5中;

     30的二进制数为11111,所以它在Set1~Set5中都有出现。

总之就是5个集合确定5位二进制数中对应位置上的值是1还是0,出现在集合中为1,未出现为0,最后组成一个5位二进制数,换算成10进制数就得到生日日期。

 

根据这个方法同理可以猜测月份,甚至年份,大家可以自行探索!

相关文章

  • Java-猜生日游戏

    5个问题找出他出生在一个月的哪一天,每个问题都是在问他的生日是否在数字集合中。生日是出现这一天的每个集合的第一个数...

  • Hello Java

    目录 Java-基础(1/6) Java-对象(2/6) Java-核心库类 上(3/6) Java-核心库类下(...

  • 猜一猜游戏

    温志花坚持分享第602天20210607 昨天晚上老公说我们一起猜一猜今年的高考作文题目吧!老公说今年会不会出和建...

  • Java-浅析Object类

    Java-浅析Object类 ++2016.7.19++byside @Java-浅析Object类 ======...

  • JAVA-线程-一-执行器Executor

    2. JAVA-线程-二-ExecutorService 接口 3. JAVA-线程-三-AbstractExec...

  • 基于C语言的模拟猜单词游戏

    一、课题内容和要求 “模拟猜单词游戏”系统要求用C或C++模拟猜单词游戏。游戏包括:单词管理、玩家纪录、猜词过程、...

  • 笨蛋娃子絮宝之生活记(一)

    猜词游戏 絮宝最近可能看电视的原因,迷上了猜词游戏。总吵着陪他猜。 一人说内容,一个猜词,轮流猜。 ...

  • JAVA-线程-三-AbstractExecutorServic

    1. JAVA-线程-一-执行器Executor 2. JAVA-线程-二-ExecutorService 接口 ...

  • JAVA-线程-二-ExecutorService 接口

    1. JAVA-线程-一-执行器Executor 3. JAVA-线程-三-AbstractExecutorSer...

  • 你写我猜(10)

    今天,我在储烨磊的生日会上举办了一个非常有意思的游戏,名叫你写我猜。 你写我猜的规则是:裁判写一个...

网友评论

      本文标题:Java-猜生日游戏

      本文链接:https://www.haomeiwen.com/subject/pbztdqtx.html