最近看到一个有意思的问题,就是看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
读者自己也可以试试