猜生日 Java小游戏
最近看到一个很有趣的小游戏:
询问朋友5个问题,找到他出生在一个月的哪一天。每个问题都是询问他的生日是否是5个数字集合中的一个。
这5个集合分别是:
set1:1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31
set2:2 3 6 7 10 11 14 15 18 19 22 23 26 27 30 31
set3:4 5 6 7 12 13 14 15 20 21 22 23 28 29 30 31
set4:8 9 10 11 12 13 14 15 24 25 26 27 28 29 30 31
set5:16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
生日是出现这一天的每个集合的第一个数字之和,例如生日是19,那么它会出现在集合1、2和5中,三个集合的第一个数字分别是1、2和16,它们的和就是19。
用Java实现就是:
import javax.swing.JOptionPane;
public class GuessBirthday{
    public static void main(String[] args) {
        String set1=
            " 1  3  5  7\n"+
            " 9 11 13 15\n"+
            "17 19 21 23\n"+
            "25 27 29 31";  
        String set2=
            " 2  3  6  7\n"+
            "10 11 14 15\n"+
            "18 19 22 23\n"+
            "26 27 30 31";  
        String set3=
            " 4  5  6  7\n"+
            "12 13 14 15\n"+
            "20 21 22 23\n"+
            "28 29 30 31";  
        String set4=
            " 8  9 10 11\n"+
            "12 13 14 15\n"+
            "24 25 26 27\n"+
            "28 29 30 31";  
        String set5=
            "16 17 18 19\n"+
            "20 21 22 23\n"+
            "24 25 26 27\n"+
            "28 29 30 31";  
        int day=0;  
        //Prompt the user to answer questions
        int answer=JOptionPane.showConfirmDialog(null,
                "Is your birthday in these numbers?\n"+set1);  
        if(answer==JOptionPane.YES_OPTION)
            day+=1;  
        answer=JOptionPane.showConfirmDialog(null,
                "Is your birthday in these numbers?\n"+set2);  
        if(answer==JOptionPane.YES_OPTION)
            day+=2;  
        answer=JOptionPane.showConfirmDialog(null,
                "Is your birthday in these numbers?\n"+set3);  
        if(answer==JOptionPane.YES_OPTION)
            day+=4;  
        answer=JOptionPane.showConfirmDialog(null,
                "Is your birthday in these numbers\n"+set4);  
        if(answer==JOptionPane.YES_OPTION)
            day+=8;  
        answer=JOptionPane.showConfirmDialog(null,
                "Is your birthday in these numbers?\n"+set5);  
        if(answer==JOptionPane.YES_OPTION)
            day+=16;  
        JOptionPane.showMessageDialog(null, "Your birthday is "+
                day+"!");
    }
} 
运行测试:
测试日期为19

集合2:选择“是”

集合1:选择“是”

集合3:选择“否”

集合4:选择“否”

集合5:选择“是”

显示生日19,正确!
原理的话,涉及到一些二进制相关的知识。
从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小游戏的更多相关文章
- 一个简单的猜大小的小游戏 python
		初学python,用python写了一个简单的猜大小的小游戏 #!/usr/bin/env python #-*- coding:utf-8 -*- print "------------- ... 
- 寒假答辩作品:Java小游戏
		目录 java入门小游戏[test] 游戏界面 前言 (可直接跳到程序介绍) 前期入门小项目 前期收获 后期自创关卡 后续 java入门小游戏[test] 游戏界面 github地址: https:/ ... 
- C 猜猜猜😀文字小游戏
		前言 - 随机性 随机数生成 - https://zh.wikipedia.org/wiki/%E9%9A%8F%E6%9C%BA%E6%95%B0%E7%94%9F%E6%88%90 没啥事情, 写 ... 
- Java小游戏
		这是一个飞机躲避子弹的小游戏,其中有许多干货 这是蒟蒻我第二次做,请各位大佬多多指教 目录 1.游戏主窗口的创建 2.图形绘制_文本绘制_颜色改变_图像对象的加载 3.线程内部类实现动画 4.游戏物体 ... 
- python摇骰子猜大小的小游戏
		#小游戏,摇筛子押大小的小游戏玩家初始有1000块钱,可以压大压小作为赌注 import random #定义摇筛子的函数: def roll_dice(number = 3,points = Non ... 
- java小游戏——猜数字
		import java.util.ArrayList; import java.util.List; import java.util.Random; public class Num01 { sta ... 
- 【python27】猜随机数的小游戏
		游戏规则: 猜一个随机数,如果猜对了就给出相应的猜成功提示语(自定义文字),如果猜大或者是猜小了,给出对应的提示,但总的猜次数为三次,每猜错一次重新猜时,给用户提示所剩余的猜次数 实现如下: # -* ... 
- java小游戏代码
		一. 需求分析 曾几何时,游戏是海洛因的代名词,让人与玩物丧志联系在一起.一度遭到社会反感和家长抵制.可是.随着互联网的发展,和游戏潜在优点被发现.游戏的价值開始逐渐被社会认可,人们開始接受.认识和了 ... 
- JAVA小游戏之两个物体碰撞产生的碰撞检测
		首先必须了解两个物体,在移动时,会有怎样的效果,比如沪我们小时候耍过的坦克大战.看起来很简单,但是写起代码来,复杂的要多: 下面举个例子: // 构造一个新的 Rectangle,其左上角的坐标为 ( ... 
随机推荐
- ovs QOS
			实验拓扑 拓扑实现脚本 ip netns add ns1 ip netns add ns2 ip netns add ns3 ip netns add ns4 ovs-vsctl add-br br0 ... 
- python--partial偏函数
			new_func = partial(函数名,参数), 生成一个新的函数, 新的函数中参数是partial固定时的参数 例1: from functools import partial def f ... 
- 微服务统一登陆认证怎么做?JWT ?
			无状态登录原理 1.1.什么是有状态? 有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session. 例如登录:用户登 ... 
- Python测试     ——开发工具库
			Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. selenium - web UI自动化测试. mechanize- Python中有状态的程序化Web浏 ... 
- Linux例行工作与系统管理(13)
			Linux 系统的任务是由cron(crond)这个系统服务来控制的,Linux系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另外,由于使用者自己也可以设置计划任务,所以Linux ... 
- nginx官方文档 之 http负载均衡 学习笔记
			一.负载均衡 算法 大致可以分两类: (1)不能保证用户的每一次请求都通过负载均衡到达同一服务器. (2)可保证用户的每一次请求都通过负载均衡到达同一服务器. 第二类的应用场景: 1.如果服务器有缓存 ... 
- day 73 初学vue (1)
			前情提要: vue 框架的初学习, 主要是,指令,属性,函数,计算属性,监听属性,钩子,生命周期,过滤器,阻止事件和综合案例todo list 学习准备,感谢学习资源: vue 官网:https:// ... 
- Python文件与函数练习题
			练习题 文件处理相关 编码问题 请说明python2 与python3中的默认编码是什么? python2默认是ASCII码,python3默认是utf-8 为什么会出现中文乱码?你能列举出现乱码的情 ... 
- Mysql数据引擎和系统库
			系统数据库 information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_schema: MySQL ... 
- POJ 2501
			#include<iostream> #include<iomanip> #include<stdio.h> #include<string> #inc ... 
