在街上有没有见过某个算命先生,声称只要你回答他几个问题他就可以推算出你的姓氏等信息?为什么这么奇妙呢?难道他找你的会算吗?呵呵……下面就让我给大家简单解释下其中的秘密吧……
先说说我这个推算出你的生日的程序的实现方法吧。
简介:我们知道任何的数字,都可以将其分解成1,2,4,8,16……这样的数字的和(2的指数),首先我们将1大到12分解成1,2,4,8这四个数字的和: 1=1;
2= 2;
3=1+2;
4= 4;
5=1+ 4;
6= 2+4;
7=1+2+4;
8= 8;
9=1+ 8;
10= 2+ 8;
11=1+2+ 8;
12= 4+8;
然后把含有1的放在一起组成第一组:1,3,5,7,9,11
含有2的放在一起组成第二组:2,3,6,7,10,11
含有4的放在一起组成第三组:4,5,6,7,12
含有8的放在一起组成第四组:8,9,10,11,12
定义一个整数i 开始为0;
好了,下面就开始问你问题了,第一个问题是:你的出生月份是第一组这些数字中的一个吗?如果是i就加1。
第二个问题是:
你的出生月份是第二组这些数字中的一个吗?如果是i就加2。
第三个问题是:
你的出生月份是第三组这些数字中的一个吗?如果是i就加4。
第四个问题是:
你的出生月份是第四组这些数字中的一个吗?如果是i就加8。
最后算出的i的值就是你出生月份的值。
同样再把1到31分解成1,2,4,8,16这些数字的和,然后分为五组。这样再问五个问题,就可以推算出你的出生的天数了。
同理,我们如果把百家姓的姓氏编个号,然后按这种方法排列一下,只需要问六个问题就可以推出你的姓氏了。其他的推算都是类似的方法。
上面已经说的很清楚了,如果还是不清楚的,可以参考一下实现代码。呵呵……仅供娱乐而已,并不是什么大作,献丑了……
package guessyourbirthday;
import javax.swing.JOptionPane;
public class GuesssYourBirthday {
public static void main(String[] args)
{
String month1 =
"1\t 3\t 5\t\n"+
"7\t 9\t 11";
String month2 =
"2\t 3\t 6\t\n"+
"7\t 10\t 11";
String month3 =
"4\t 5\t 6\t\n"+
"7\t 12";
String month4 =
"8\t 9\t 10\t\n"+
"11\t 12\t";
String day1 =
" 1\t 3\t 5\t 7\t\n"+
" 9\t 11\t 13\t 15\t\n"+
" 17\t 19\t 21\t 23\n"+
" 25\t 27\t 29\t 31";
String day2 =
" 2\t 3\t 6\t 7\t\n"+
" 10\t 11\t 14\t 15\t\n"+
" 18\t 19\t 22\t 23\t\n"+
" 26\t 27\t 30\t 31";
String day3 =
" 4\t 5\t 6\t 7\t\n"+
" 12\t 13\t 14\t 15\t\n"+
" 20\t 21\t 22\t 23\t\n"+
" 28\t 29\t 30\t 31";
String day4 =
" 8\t 9\t 10\t 11\t\n"+
" 12\t 13\t 14\t 15\t\n"+
" 24\t 25\t 26\t 27\t\n"+
" 28\t 29\t 30\t 31";
String day5 =
" 16\t 17\t 18\t 19\t\n"+
" 20\t 21\t 22\t 23\t\n"+
" 24\t 25\t 26\t 27\t\n"+
" 28\t 29\t 30\t 31";
int month = 0;
int day = 0;
int answer1 = JOptionPane.showConfirmDialog(null, "亲,你的出生月份在这些数字中吗?\n" + month1);
if(answer1 == JOptionPane.YES_OPTION)
month += 1;
answer1= JOptionPane.showConfirmDialog(null, "亲,你的出生月份在这些数字中吗?\n" + month2);
if(answer1 == JOptionPane.YES_OPTION)
month += 2;
answer1 = JOptionPane.showConfirmDialog(null, "亲,你的出生月份在这些数字中吗?\n" + month3);
if(answer1 == JOptionPane.YES_OPTION)
month += 4;
answer1 = JOptionPane.showConfirmDialog(null, "亲,你的出生月份在这些数字中吗?\n" + month4);
if(answer1 == JOptionPane.YES_OPTION)
month += 8;
int answer2=JOptionPane.showConfirmDialog(null, "亲,你的出生日期在这些数字中吗?\n" + day1);
if(answer2==JOptionPane.YES_OPTION)
day+=1;
answer2=JOptionPane.showConfirmDialog(null, "亲,你的出生日期在这些数字中吗?\n" + day2);
if(answer2==JOptionPane.YES_OPTION)
day+=2;
answer2=JOptionPane.showConfirmDialog(null, "亲,你的出生日期在这些数字中吗?\n" + day3);
if(answer2==JOptionPane.YES_OPTION)
day+=4;
answer2=JOptionPane.showConfirmDialog(null, "亲,你的出生日期在这些数字中吗?\n" + day4);
if(answer2==JOptionPane.YES_OPTION)
day+=8;
answer2=JOptionPane.showConfirmDialog(null, "亲,你的出生日期在这些数字中吗?\n" + day5);
if(answer2==JOptionPane.YES_OPTION)
day+=16;
JOptionPane.showMessageDialog(null, "O(∩_∩)O哈哈~,亲,我猜到你的生日是 " + month + "月" + day + "号!");
}
}
运行效果截图:
![回答我九个问题,我就可以推算出你的生日(java版) - 水到绝境是飞瀑 - 潜水的小企鹅 回答我九个问题,我就可以推算出你的生日(java版) - 水到绝境是飞瀑 - 潜水的小企鹅](http://img9.ph.126.net/388nERcROUDvIotyxSMfnQ==/607422999759383979.jpg)