猜生日 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,其左上角的坐标为 ( ...
随机推荐
- MQ的demo
public class WorkTest { @Test public void send() throws Exception{ //获取连接 Connection conn = ...
- Java并发编程总结1——线程状态、synchronized
以下内容主要总结自<Java多线程编程核心技术>,不定时补充更新. 一.线程的状态 Java中,线程的状态有以下6类:NEW, RUNNABLE, BLOCKED, WAITING, TI ...
- 程序猿的日常——Mybatis现学现卖
最近有一个小项目需求,需要用spring mvc + mybatis实现一个复杂的配置系统.其中遇到了很多不太常见的问题,在这里特意记录下: 主要涉及的内容有 事务 多表删除 插入并返回主键 1 sp ...
- 微信赌场——H5棋牌游戏渗透之旅
i春秋作家:F0rmat 0x01 前言 本来不想发的,涉及太多利益了,这些棋牌游戏的源码最高能卖到几万.开发起来不比一个商场程序难.最近又太忙了,没时间去做代码审计的文章了,但一不小心又抢了个运气王 ...
- Weblogic 错误 <BEA-000403> <BEA-000438>解决办法
控制台提示如下错误: <Error> <Socket> <BEA-000438> <Unable to load performance pack. Us ...
- Spring Boot中使用@Scheduled创建定时任务
我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信.邮件之类的操作,也可能会定时地检查和监控一些标志.参数等. 创建定时任务 在Spring Boot中编写定时 ...
- python进程——生产者消费者
生产者消费者模型介绍 为什么要使用生产者消费者模型 生产者指的是生产数据的任务,消费者指的是处理数据的任务,在并发编程中,如果生产者处理速度很快,而消费者处理速度很慢,那么生产者就必须等待消费者处理完 ...
- odoo开发笔记-日期时间相关操作
日期格式化字符串:DATE_FORMAT = "%Y-%m-%d" 日期时间格式字符串:DATETIME_FORMAT = "%Y-%m-%d %H:%M:%S" ...
- odoo开发笔记:Server+Action服务器动作自动触发执行
Odoo的市场定位是SME(中小型企业),这个市场的ERP产品,多如牛毛,产品各具特色.不过,Odoo的自动化处理机制,可以睥睨天下,无人能及.包括一些大型国产软件,如用友.金蝶也不具备 ...
- Unity使用Rider作为IDE的体验
Rider 2017.2.1比较完整的支持Unity开发. 通过添加插件代码实现了直接选择Rider作为编辑器. 支持调试. 支持双击跳转代码. Alt+Insert可以插入Unity event函数 ...