最近看到一个有意思的问题,就是看5组数里有没有你生日所在的那一天,然后就猜出你的生日是几号
我照书上个简单的GUI程序,来实现它
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
读者自己也可以试试