JAVA编程生日问题_猜生日问题

package 猜生日;

import javax.swing.JOptionPane;

public class GuessBirthdayUsingConfirmationDialog {

/**

* @param args

*/

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+"!");

}

}

其实这问题仔细想想也挺有意思的

为什么刚好是5个问题,原来一个月最多31天,5个问题回答是和否最多32种情况

包含了其中的每一天,再仔细看看那5组数据都是有特点的

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";

第一组16个数表示的就是二进制最低位是1的所有数字 (例如1的二进制是1)3,5,7...都是

第二组16个数表示的就是二进制第二位是1的数字(例如2的二进制是10)

第三组16个数表示的就是二进制第三位是1的数字(例如4的二进制是100)

第四组16个数表示的就是二进制第四位是1的数字(例如8的二进制是1000)

第五组16个数表示的就是二进制第五位是1的数字(例如16的二进制是10000)

读者可以根据这个规律自己写出这5组数据

二进制数中有一位定下来了,其他4位没定,所以每组数据就有32/2=16个了

猜的时候只要记住被猜人回答哪一组里面有他生日的,我们先初始化他的生日为0号

如果第一组有,就+1

第二组有,就+2

第三组有,就+4

第四组有,就+8

第五组有,就+16

读者自己也可以试试

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值